execution 명시자는 포인트컷을 명시할 때 어드바이스들이 동작할 수 있도록 해주는 표현식 문법이다.

 

 

출처 : [토비의 스프링 3.1] 6장_AOP_포인트컷 표현식 문법

 

execution 명시자는 위의 그림과 같이 접근제한자, 리턴타입, 클래스이름, 메소드이름, 매개변수 의 순으로 이루어져있다.

접근제한자는 public만 지원하기 때문에 생략한다. 클래스이름은 패키지까지 적어주어야하는데 이 역시도 *(Asterisk) 이면 생략이 가능하다.

패턴에 *이나 ..을 사용하여 줄일 수 있는데 *과 ..의 의미는 다음과 같다.

 

 

*(Asterisk) : 하나의 모든 것을 의미한다.

.. : 개수 상관 없이 모든 것을 의미한다.

 

 

 

어떻게 쓰이는지 xml Configuration 파일을 살펴보자. 

 

 

 

여러가지 상황에 대해서 설정을 해보았다. 

 

expression="execution(void com.study.spring.beans.TestBean2.method1())"

-> 매개변수에 아무것도 설정되어 있지 않기 때문에 매개변수가 없는 void형의 method1 메소드에만 포인트컷이 적용된다.

 

 

expression="execution(void com.study.spring.beans.TestBean2.method1(int))"

-> 매개변수에 int 한개가 들어가 있다. 같은 이름의 메소드 method1이 매개변수만 다르게 여러개가 있으면 그 중에서 매개변수를 int로 받는 advice만 적용된다.

 

 

expression="execution(void com.study.spring.beans.TestBean2.method1(int, int))"

-> 매개변수에 int 두개가 들어가 있다. 매개변수의 개수까지 철저하게 지키기 때문에 위에처럼 int 한개만 받는 advice는 적용이 안되고 두개가 들어가 있어야 적용된다.

 

 

expression="execution(void com.study.spring.beans.TestBean2.method1(*))"

-> *는 모든 타입을 받지만 갯수는 한개! 예를들어 매개변수가 java.lang.String (String은 자바에서 클래스이기 때문에 이렇게 입력해주어야 한다.) 이면 적용이되지만 int, double 이렇게 두개면 적용이 안된다.

 

 

expression="execution(void com.study.spring.beans.TestBean2.method1(..))"

-> ..는 타입, 갯수 상관없이 모든 매개변수를 받는다. method1이라는 메소드에 매개변수의 타입이 여러 형태이고 갯수가 여러개여도 상관이 없다.

 

 

expression="execution(void com.study.spring.beans.TestBean2.*(..))"

-> 메소드부분이 *처리가 되어 있다. com.study.spring.beans.TestBean2 라는 클래스에 있는 모든 메소드에 어떤 매개변수가 들어가도 다 적용할 수 있다는 뜻이 되겠다.

 

 

expression="execution(void *.*(..))"

-> 클래스부분까지 *처리가 되어 있다. 반환형이 void인 모든 패키지의 모든 클래스의 모든 메소드에 어떤 매개변수가 들어가도 다 적용을 할 수 있다는 뜻이다.

 

 

expression="execution(* *.*(..))"  /  expression="execution(* *(..))" 
-> 반환타입까지 *처리가 되어 있다. 모든 반환타입, 모든 패키지, 모든 클래스, 모든 메소드, 모든 매개변수에 다 적용된다. 클래스는 *이면 생략할 수 있기 때문에 후자의 형태로 적어도 상관이 없다.

'JAVA > Spring' 카테고리의 다른 글

Spring JDBC  (0) 2020.04.20
@AspectJ 어노테이션  (0) 2020.04.17
AOP  (0) 2020.04.17
@Component 어노테이션  (0) 2020.04.15
JSR-250 어노테이션  (0) 2020.04.11

+ Recent posts