앞서 이야기한 스프링 부트 자동 설정으로 AnnotationAwareAspectJAutoProxyCreator 라는 빈 후처리기가 스프링 빈에 자동으로 등록됩니다.
이 빈 후처리기는 스프링 빈으로 등록된 Advisor 들을 자동으로 찾아서 프록시가 필요한 곳에 자동으로 프록시를 적용해줍니다.
Advisor 안에는 Pointcut 과 Advice 가 이미 모두 포함되어 있습니다.
따라서 Advisor 만 알고 있으면 그 안에있는 Pointcut 으로 어떤 스프링빈에 프록시를 적용해야 할지알 수 있습니다.
그리고 Advice로 부가기능을 적용하면 됩니다.
- 생성: 스프링이 스프링 빈 대상이 되는 객체를 생성합니다. (@Bean , 컴포넌트 스캔 모두 포함)
- 전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달합니다.
- 모든 Advisor 빈 조회: 자동 프록시 생성기 - 빈 후처리기는 스프링 컨테이너에서 모든 Advisor 를 조회합니다.
- 프록시 적용 대상 체크: 앞서 조회한 Advisor 에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단합니다.
객체의 클래스 정보는 물론이고, 해당 객체의 모든 메서드를 포인트컷에 하나하나 모두 매칭해봅니다.
조건이 하나라도 만족하면 프록시 적용 대상이 됩니다.- 프록시 생성: 프록시 적용 대상이면 프록시를 생성하고 반환해서 프록시를 스프링 빈으로 등록하고 프록시 적용 대상이 아니라면 원본 객체를 반환해서 원본 객체를 스프링 빈으로 등록합니다.
- 빈 등록: 반환된 객체는 스프링 빈으로 등록된다.
reference : 김영한선생님