[Spring] @Autowired 동작 원리 - BeanPostProcessor
@Autowired 어노테이션을 생성자, setter, 필드에 붙이기만 함으로써 간편하게 의존성을 주입받을 수 있는데 어떻게 그렇게 동작할 수 있는지 그원리에 대해 알아보자.
결론부터 말하자면 @Autowired 어노테이션은 BeanPostProcessor
라는 라이프 사이클 인터페이스의 구현체인 AutoWiredAnnotationBeanPostProcessor
에 의해 의존성 주입이 이루어진다.
BeanPostProcessor는 빈의 initializing(초기화) 라이프 사이클 이전, 이후에 필요한 부가 작업을 할 수 있는 라이프 사이클 콜백이다.
그리고 BeanPostProcessor의 구현체인 AutowiredAnnotationBeanPostProcessor
가 빈의 초기화 라이프 사이클 이전, 즉 빈이 생성되기 전에 @Autowired가 붙어있으면 해당하는 빈을 찾아서 주입해주는 작업을 하는 것이다.
AutowiredAnnotationBeanPostProcessor는 하나의 빈으로써 Spring IoC 컨테이너에 등록되어 있다.
BeanFactory(ApplicationContext)는 BeanPostProcessor 타입의 빈 = AutowiredAnnotationBeanPostProcessor 빈을 꺼내 일반적인 빈들 = @Autowired로 의존성 주입이 필요한 빈들에게 @Autowired를 처리하는 로직을 적용한다.