일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- github
- 자바
- 운영체제
- 개발
- 깃
- 뮤텍스
- 스터디
- IT
- 프로그래밍
- OS
- 디지털
- 깃허브
- java
- spring
- 컴퓨터과학
- 메모리
- CS
- 신입
- 알고리즘
- 세마포어
- Public
- 신입사원
- 이펙티브 자바
- 컴퓨터공학
- Effective Java
- 스프링
- 우리카드
- package-private
- 공채
- 정보처리기사
- Today
- Total
주니어 개발자 성장기
Advisor와 Advice, Pointcut 와 BeanPostProcessor 본문
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 가 붙은 메서드)를 구현할 수 있다.