인프런 커뮤니티 질문&답변

서정원님의 프로필 이미지
서정원

작성한 질문수

스프링 핵심 원리 - 기본편

AutowiredTest관련 질문

작성

·

215

0

static class TestBean에서 @Autowired를 3개를 했지만 3개가 등록이 되는건 아니라고 하셨는데 위에서 저렇게 print를 했을때에는 나오지 않더라구요... 어떻게 해야지 밑에 @Autowired중에 잘 들어간 함수들을 출력해서 직접 볼 수 있을지가 궁금합니다.

해당 코드를 실행했을 때의 결과는 다음과 같습니다.

답변 2

0

@Bean 어노테이션과 @Autowired 어노테이션을 헷갈려 하시는 거 같습니다. 현재 ac.beanDefinitionNames 안에 등록되어 있는 bean은 해당 클래스인 TestBean 밖에 없습니다. bean에 대한 출력구문이 한 번만 나오는 이유이기도 합니다.

@Autowired 어노테이션은 컨테이너에 등록된 빈을 의존주입 해주는 역할입니다. @Autowired는 현재 해당 어노테이션이 붙어 있는 3개의 setNoBean 메서드의 Member 객체를 의존주입 해주는 역할입니다. (그러나 Member 클래스가 빈으로 등록되지 않았지요.)

@Autowired가 잘 들어간 메서드를 확인하는 방법으로는 현재 코드처럼 메서드 내에서 출력을 하는 게 최선의 방법이라 생각됩니다.

0

안녕하세요. 서정원님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

질문 내용이 포함된 강의 시간대를 알려주시겠어요?

혹시나 해서, 강의 코드와 똑같이 했는데 영상과 다르게 로그가 나오고, 현재 스프링 부트 3버전을 사용하고 계신다면 다음 링크(클릭) 을 참고해보시겠습니까?

감사합니다.

서정원님의 프로필 이미지
서정원
질문자

섹션7에서 옵션처리 부분입니다. 다만 static class는 설정하는 부분이 영상에 나오지만 저 Autowired된 부분들이 잘 출력이 되나 싶어서 예전에 모든 빈 출력하기 부분에서 썼던 코드를 그대로 가져와서 출력을 해보았더니 저렇게 나온 상황입니다. Autowired를 넣어주고 2번과 3번이 잘 들어갔는지 확인하는 방법이 궁금합니다.
beanDefinitionName=1번 BeanObject=1번함수 이름
이런식으로 나오게 하고싶네요 예전 모든 빈 조회에서 나온것처럼

모든 빈 출력하기에서 개발자가 스프링 컨테이너에 등록한 빈들을 조회하는 테스트 코드를 가지고 오신 것으로 보입니다.

현재 올려주신 코드에서는 TestBean에 대해서만 나오는 상황입니다.사실 이는 당연한 것이, Member가 빈이 아니기 때문입니다. @Bean, @Component로 Member 객체를 빈으로 등록해주지 않았기 때문에, 위의 테스트 코드에서 개발자가 등록한 빈을 조회할 때 당연히 조회가 되지 않습니다.

2, 3번 케이스는 @Autowired는 필수로 붙어있어 의존관계 주입을 시도하지만 섹션7 옵션 처리 부분에서 말씀드렸듯이 @Nullable, Optional로 인해 null, Optional.empty()가 들어가게 되고, 빈으로 등록되지 않았기 때문에 위의 테스트 코드에서 TestBean만 등록된 결과가 나오는 것으로 보입니다!

서정원님의 프로필 이미지
서정원

작성한 질문수

질문하기