@Autowired 애노테이션을 생성자, setter, 필드에 붙이기만 함으로써 간편하게 의존성을 주입받을 수 있는데 어떻게 그렇게 동작할수 있는지, 그 원리에 대해 알아보자.
결론부터 말하자면 @Autowired 애노테이션은 BeanPostProcessor라는 라이프 사이클 인터페이스의 구현체인 AutowiredAnnotationBeanPostProcessor에 의해 의존성 주입이 이루어진다.
BeanPostProcessor는 빈의 initializing(초기화) 라이프 사이클 이전, 이후에 필요한 부가 작업을 할 수 있는 라이프 사이클 콜백이다.
그리고 BeanPostProcessor의 구현체인 AutowiredAnnotationBeanPostProcessor가 빈의 초기화 라이프 사이클 이전, 즉 빈이 생성되기 전에 @Autowired가 붙어있으면 해당하는 빈을 찾아서 주입해주는 작업을 하는 것이다.
빈 라이프 사이클
위의 빈 라이프 사이클을 보면 12. 빈 초기화 이전, 이후를 BeanPostProcessors가 감싸고 있는 것을 볼 수 있다.
AutowiredAnnotationBeanPostProcessor는 하나의 빈으로써 spring IoC 컨테이너에 등록되어 있다.
BeanFactory(ApplicationContext)는 BeanPostProcessor 타입의 빈 = AutowiredAnnotationBeanPostProcessor 빈을 꺼내 일반적인 빈들 = @Autowired로 의존성 주입이 필요한 빈들에게 @Autowired를 처리하는 로직을 적용한다.
'Programming > Spring' 카테고리의 다른 글
@Component 와 @Bean, @Autowired 어노테이션 알아보기 (0) | 2022.06.05 |
---|---|
[Spring] Component Scan과 Function을 사용한 빈 등록 방법 (0) | 2022.05.29 |
[Spring] @Autowired의 다양한 사용 방법 - required, Primary, Qualifier (0) | 2022.05.29 |
[Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan (0) | 2022.05.29 |
[Spring] 스프링 PSA (0) | 2022.05.29 |