Hello, Freakin world!

[Spring AOP] 포인트컷 지시어들(Designators) 본문

Spring boot

[Spring AOP] 포인트컷 지시어들(Designators)

johnna_endure 2020. 7. 18. 10:03
참고 : https://docs.spring.io/spring/docs/4.3.15.RELEASE/spring-framework-reference/html/aop.html#aop-pointcuts-designators

이 글은 위의 내용을 요약/정리한 내용입니다. 

 

* 본 글에서 Designator는 지시어라는 용어로 나타냈습니다. Designator는 쉽게 말하자면 포인트컷 표현식 내에서 어떤 기능들을 수행하기 위해 정의해놓은 속성들입니다. 

 


지원하는 포인트컷 지시어들 

 

스프링 AOP는 다음의 AspectJ 포인트컷 지시어를 지원합니다.

 

- execution :  메서드 조인 포인트에 매칭할 때, 주로 사용되는 기본적인 포인트컷 지시어입니다.

- within : 주어진 타입으로 조인 포인트 범위를 제한할 수 있는 지시어.

- this : 주어진 타입의 빈(Spring AOP 프록시)으로 매칭

- target : 주어진 타입의 target object(프록시가 아니라 뒤에 있는 애플리케이션 객체)로 매칭

- args : 주어진 타입의 인수들을 이용해 매칭

- @taget : 주어진 타입의 애너테이션을 가진 클래스의 인스턴스를 매칭

- @args : 실제 인수의 런타임 타입이 주어진 타입의 애너테이션을 가질 경우 매칭

- @within : 주어진 타입의 애너테이션을 타입들로 제한하여 매칭

- @annotation : 주어진 애너테이션을 가지고 있을 경우 매칭

 

스프링 AOP는 메서드 조인 포인트만을 지원하기 때문에 포인트 지시어가 논의 범위가 AspectJ의 범위보다 좁습니다.

게다가 AspectJ는 타입 기반 의미체계를 가집니다. 그래서 this와 target이 같은 객체와 매칭됩니다. 

Spring AOP는 프록시 기반 체계를 가지기 때문에 this는 프록시 객체와 target은 애플리케이션 객체와 매칭됩니다.

 

참고 

 

이외의 포인트 타입들에 대해서 AspectJ는 위의 것들 이외의 지시어들을 지원합니다. 

call, get, set, preinitialization, staticinitialization, initialization, handler, adviceexecution, withincode, cflow, cflowbelow, if, @this, @withincode.

지원하지 않는 지시어들을 사용할 경우 Spring AOP는 IllegalArgumentException 를 던집니다.

 

지원하지 않는 포인트컷 지시어들은 Spring AOP의 다음 릴리즈때 포함될 수도 있습니다. 

 

 

Spring AOP는 또한 추가적인 지시어 bean을 지원합니다.

이 지시어는 스프링 빈의 이름을 통해서 메서드 매칭이 가능하게 해줍니다.

다음과 같은 형태로 사용할 수 있습니다.

bean(idOrNameOfBean)

 

idOrNameOfBean에 *과 같은 와일드카드를 이용할 수도 있습니다.

 

참고) bean 지시어는 스프링 AOP에서만 사용 가능합니다.

Comments