작성
·
215
답변 2
0
@Bean 어노테이션과 @Autowired 어노테이션을 헷갈려 하시는 거 같습니다. 현재 ac.beanDefinitionNames 안에 등록되어 있는 bean은 해당 클래스인 TestBean 밖에 없습니다. bean에 대한 출력구문이 한 번만 나오는 이유이기도 합니다.
@Autowired 어노테이션은 컨테이너에 등록된 빈을 의존주입 해주는 역할입니다. @Autowired는 현재 해당 어노테이션이 붙어 있는 3개의 setNoBean 메서드의 Member 객체를 의존주입 해주는 역할입니다. (그러나 Member 클래스가 빈으로 등록되지 않았지요.)
@Autowired가 잘 들어간 메서드를 확인하는 방법으로는 현재 코드처럼 메서드 내에서 출력을 하는 게 최선의 방법이라 생각됩니다.
0
모든 빈 출력하기에서 개발자가 스프링 컨테이너에 등록한 빈들을 조회하는 테스트 코드를 가지고 오신 것으로 보입니다.
현재 올려주신 코드에서는 TestBean에 대해서만 나오는 상황입니다.사실 이는 당연한 것이, Member가 빈이 아니기 때문입니다. @Bean, @Component로 Member 객체를 빈으로 등록해주지 않았기 때문에, 위의 테스트 코드에서 개발자가 등록한 빈을 조회할 때 당연히 조회가 되지 않습니다.
2, 3번 케이스는 @Autowired는 필수로 붙어있어 의존관계 주입을 시도하지만 섹션7 옵션 처리 부분에서 말씀드렸듯이 @Nullable, Optional로 인해 null, Optional.empty()가 들어가게 되고, 빈으로 등록되지 않았기 때문에 위의 테스트 코드에서 TestBean만 등록된 결과가 나오는 것으로 보입니다!
섹션7에서 옵션처리 부분입니다. 다만 static class는 설정하는 부분이 영상에 나오지만 저 Autowired된 부분들이 잘 출력이 되나 싶어서 예전에 모든 빈 출력하기 부분에서 썼던 코드를 그대로 가져와서 출력을 해보았더니 저렇게 나온 상황입니다. Autowired를 넣어주고 2번과 3번이 잘 들어갔는지 확인하는 방법이 궁금합니다.
beanDefinitionName=1번 BeanObject=1번함수 이름
이런식으로 나오게 하고싶네요 예전 모든 빈 조회에서 나온것처럼