@Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다.
이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 됩니다.
- 생성: 스프링 빈 대상이 되는 객체를 생성합니다. (@Bean , 컴포넌트 스캔 모두 포함)
- 전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달합니다.
- 후 처리 작업: 빈 후처리기는 전달된 스프링 빈 객체를 조작하거나 다른 객체로 바뀌치기 할 수 있습니다..
- 등록: 빈 후처리기는 빈을 반환한다. 전달 된 빈을 그대로 반환하면 해당 빈이 등록되고, 바꿔치기 하면 다른 객체가 빈 저장소에 등록됩니다.
일반적으로 스프링 컨테이너가 등록하는 컴포넌트 스캔의 대상이 되는 빈들은 중간에 조작할 방법이 없는데,
빈 후처리기를 사용하면 개발자가 등록하는 모든 빈을 중간에 조작할 수 있습니다.
이 말은 빈 객체를 프록시로 교체하는 것도 가능하다는 뜻입니다.
reference : 김영한선생님