주니어 개발자 성장기

Advisor와 Advice, Pointcut 와 BeanPostProcessor 본문

Spring/AOP

Advisor와 Advice, Pointcut 와 BeanPostProcessor

Junpyo Lee 2023. 6. 16. 10:09

Advisior(어드바이저)란?

프록시 내부에서 실제 대상을 호출하기 전에 호출되는 것으로 여기에 공통적으로 적용할 부가 기능을 구현할 수 있다. ex) 시간 재기, 로깅 등
어드바이저는 하나의 Pointcut과 하나의 Advice로 구성된다.

Advice

부가기능을 책임지고 있는 인터페이스로서 MethodInterceptor를 구현하여 Advice를 만들 수 있다. invoke메서드에 부가 로직을 구현하면 된다.

Pointcut

포인트 컷은 실제 대상 클래스가 호출하는 메서드가 부가기능이 적용되는 지 체크하는 것으로 NameMatchMethodPointcut, AspectJExpressionPointcut 등의 것들을 이용할 수 있다.

 

주의!
하나의 프록시에는 여러개의 어드바이저가 들어갈 수 있다. 한 객체에 여러 어드바이저가 적용된다고 해서 여러개의 프록시가 생기는 방식이 아니다!

 

BeanPostProcessor(빈 후처리기)

Spring 라이프 사이클 중에서 빈이 등록된 후 빈에 관한 처리를 책임지는 인터페이스다. Bean으로 등록하면 모든 Bean에 대해 override한 메서드를 수행한다.

 

 

AnnotationAwareAspectJAutoProxyCreator

Spring AOP 에서 제공하는 빈 후처리기로서 Advisor를 Bean으로 등록하기만 하면 자동으로 Proxy를 만들어서 Pointcut에 일치하는 메서드가 하나라도 있는 Bean을 대상으로 Proxy를 생성해 Advisor를 적용시켜준다.

 

그리고 @Aspect 어노테이션이 붙은 Bean을 찾아서(Bean으로 등록해줘야 한다 !) Advisior로 만들어준다. @Around 어노테이션은 AspetJ 표현식을 넣어 포인트 컷처럼 동작하고 @Around가 붙은 메서드는 Advice처럼 동작하기 때문에 부가기능을 구현해주면 된다. 하나의 @Aspect Bean에 여러 Advisor(@Around 가 붙은 메서드)를 구현할 수 있다.