[Spring] AOP 정리
AOP(Aspect Oriented Programming)
- 핵심 관심 사항(core concern)과 공통(부가) 관심 사항(cross-cutting concern)
1. Target
- 핵심 기능을 담고 있는 모듈로 target은 부가기능을 부여할 대상이 됨
2. Advice
- 어느 시점에 어떤 공통 관심 기능을 적용할지 정의 한 것.
Target에 제공할 부가기능을 담고 있는 모듈.
- 시점은 총 5개
3. JoinPoint
- Target가 Advice가 만나는 지점
- Aspect가 적용될 수 있는 지점(method, field)
- 즉 target 객체가 구현한 인터페이스의 모든 method는 JoinPoint가 됨
4. Pointcut
- 공통 관심 사항이 적용될 JoinPoint.
- Advice를 적용할 target의 method를 선별하는 정규 표현식
5. Aspect
- 여러 객체에서 공통으로 적용되는 공통 관심 사항
Aspect = Advice + JoinPoint
6. Advisor
7. Weaving
어떤 Advice를 어떤 Pointcut(핵심사항)에 적용시킬 것인지에 대한 설정(Advisor)
생성자 injection을 사용하는 이유
1. final을 사용할 수 있음
2. 순환 참조를 막을 수 있다.
constructor-arg의 순서는 상관 있다.
Advice 목록
메소드의 주기와 연관됨
Before Advice
대상 객체의 메소드가 실행되기 전에 실행됨
After Returning Advice
대상 객체의 method 실행이 정상적으로 끝난 뒤 실행됨
After Throwing Advice
대상 객체의 method 실행 중 exception이 발생했을 때 실행됨
After Advice
대상 객체의 method 실행이 끝나면 실행됨(finally와 역할이 같음)
Around Advice
위의 네가지 Advice를 다 구현할 수 있는 Advice
exception은 축소만 가능하다.
접근제한자는 확대만 가능하다.