Bean 후처리기란 Spring Cotext가 객체 생성 후, Container 에 Bean 으로 등록하기 전 실행하는 로직이다.
빈 후처리 로직에 프록시 bean을 등록하게 하면 공통으로 같은 프록시가 적용될 수 있다.
이전 실습에서는 프록시 타겟마다 프록시 생성을 일일이 해준 것을 빈 후처리기를 통해 코드 재사용성을 높였다.
빈 후처리기 + 포인트 컷
빈 후처리기는 전역을 대상으로 실행되기 때문에, 프록시 적용이 필요한 bean 에만 적용되도록 필터링이 필요하다.
필터링 역할을 포인트 컷이 할 수 있다.
Spring AOP 를 사용하면 AnnotationAwareAspectJAutoProxyCreator라는 빈후처리기가 스프링 빈으로 자동 등록된다.
AnnotationAwareAspectJAutoProxyCreator는 Spring 내 org.springframework.aop.Advisor를 Bean을 스캔해서 전역 Advisor로 등록한다. 이 때, advisor 내 포인트컷 정보를 통해 프록시를 생성할지말지 판단한다. 클래스 내 프록시가 적용되는 메서드 하나만 있어도 해당 클래스는 프록시로 등록된다.
포인트컷 정보는 프록시 객체를 생성할 때 사용되고, 프록시 advise 가 실행될 때도 필터링으로 사용된다.
Spring AOP 의 AspectJExpressionPointcut은 특정 문법의 표현식을 통해 쉽게 포인트컷을 만들 수 있다.
pointcut 에 해당하는 클래스만 프록시를 생성해서 시스템 비용 낭비를 줄인다.
멀티 Advisor
Spring AOP 는 한 객체에 여러 프록시를 등록하는 대신, 여러 advisor(pointcut+advice)를 사용한다.
프록시 생성 시에는 여러 advisor 내의 pointcut 중 하나에 해당되더라도 프록시를 생성한다.