개요
관심사를 분리합니다.
비즈니스로직에 집중할 수 있게 합니다.
선행 개념
advice
실행할 로직은 어떤것인가?
| 1 | public void myAdvice() { | 
pointcut
어떤 대상을 기준으로 advice 를 동작하게 할것인가?execution(* com.aop.controller.*(..))within(com.aop.controller..) 
joinpoint
동작될 대상의 어떤 시점에 advice 를 동작시킬것인가?@Before(...)@After(...)@Around(...)
aspect 구성
- 컨트롤러에 @Aspect를 등록합니다.
- advice 메소드를 만듭니다.
- advice 에 joinpoint 를 등록합니다.
- poinpoint 에 pointcut 을 지정합니다.
예시
| 1 | 
 | 
Aspect 상세정보
pointcut
지시자
- execution표현식에 부합되는 함수를 선택합니다.
- within특정 타입에 속하는 함수 전체를 지정
- bean
- And, Or복합적인 조건을- &&,- ||로 지정할 수 있습니다.
표현식
[접근제어자] [리턴타입] [패키지] [클래스이름] [메소드명](파라미터)
사용 예제
| example | 리턴타입 | 패키지 | 클래스 | 메소드 | 파라미터 | 
|---|---|---|---|---|---|
| * com.aop.controller.*.*(..) | 모든 타입 | com.aop.controller | 모든 클래스 | 모든 메소드 | 모든 파라미터 | 
| String com.aop.controller.HomeController.index(*) | String | com.aop.controller | HomeController | index | 파라미터가 1개 | 
jointpoint
동작시점
| 어노테이션 | 설명 | 
|---|---|
| @Before | 메소드 실행 전 동작 | 
| @After | 메소드 실행 후 동작 | 
| @Around | 메스도 실행 전, 후 동작 | 
| @AfterReturning | 메소드 실행 후 동작 메소드 반환값 획득 가능 | 
| @AfterThrowing | 예외가 발생했을때 동작 | 
advice
파라미터 확인
| 1 | ("execution(* com.aop.demo.util.*.*(*))") | 
리턴 확인
| 1 | (value = "execution(* com.aop.demo.util.*.*(*))", returning = "returnValue") |