개요
관심사를 분리합니다.
비즈니스로직에 집중할 수 있게 합니다.
선행 개념
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 | "execution(* com.aop.demo.util.*.*(*))", returning = "returnValue") (value = |