공부 자료/Spring

[Spring Core] AOP - Pointcut 표현식

희희웃는청바지 2022. 10. 17. 14:07

[포인트컷 표현식]

: 포인트컷은 관심 조인 포인트를 결정하므로 어드바이스가 실행되는 시기 제어가 가능하며 AspectJ는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공

: AspectJ pointcut expression >> AspectJ 가 제공하는 포인트컷 표현식을 줄여서 표현하는 것

* 포인트컷을 이용하면 어드바이스 메서드가 적용될 비즈니스 메서드를 정확하게 필터링 할 수 있음

Pointcut : 특정 조건에 의해 필터링된 Joinpoint, 수많은 Joinpoint 중에 특정 메서드에서만 공통기능(횡단관심사)을 수행시키기 위해 사용함)

 

 

포인트컷 표현식 결합)

: &&, ||, !를 사용하여 결합 가능

: 이름으로 포인트컷 표현식 참조가 가능

 

 

일반적인 포인트컷 표현식)

1. 모든 공개 메서드 실행

: execution(public * * (..))

 

2. set 다음으로 시작하는 모든 메서드 실행

: execution(* set*(..))

 

3. AccountService 인터페이스에 의해 정의된 모든 메서드의 실행

: execution(* com.xyz.service.AccountService.*(..))

 

4. service 패키지에 정의된 메서드 실행

: execution(* com.xyz.service.*.*(..))

 

5. 서비스 패키지 또는 해당 하위 패키지 중 하나에 정의된 메서드 실행

: execution(* com.xyz.service..*.*(..))

 

6. 서비스 패키지 내의 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: within(com.xyz.service.*)

 

7. 서비스 패키지 또는 하위 패ㅣ지 중 하나 내의 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: within(com.xyz.service..*)

 

8. AccountService 프록시가 인터페이스를 구현하는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: this(com.xyz.service.AccountService)

 

9. AccountService 대상 객체가 인터페이스를 구현하는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: target(com.xyz.service.AccountService)

 

10. 단일 매개변수를 사용하고 런타임에 전달된 인수가 Serializable과 같은 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: args(java.io.Serializable)

 

11. 대상 객체에 @Transactional 애너테이션이 있는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)

: @target(org.springframework.transaction.annotion.Transcational

 

12. 실행 메서드에 @transcation 애너테이션이 있는 조인 포인트(Spring AOP에서만 메서드 실행)

: @annotation(org.springframework.transaction.annotation.Transcational)

 

13. 단일 매개 변수를 사용하고 전달된 인수의 런타임 우형이 @Classified 애너테이션을 갖는 조인 포인트(Spring AOP에게서만 메서드 실행)

: @args(com.xyz.security.Classfied)

 

14. tradeService 라는 이름을 가진 스프링 빈의 모든 조인 포인트

: bean(tradeService)

 

15. 와일드 표현식 *Service 라는 이름을 가진 스프링 빈의 모든 조인 포인트

: bean(*Service)

 

 

[포인트컷 지시자]

: 포인트컷 표현식은 execution과 같은 포인트컷 지시자(Pointcut Designator)로 시작

 

종류)

1. excution

: 메서드 실행 조인트 포인트를 매칭함

: 스프링 AOP에서 가장 많이 사용하며, 기능도 복잡함 >> 가장 정교한 포인트컷을 만들 수 있음

 

2. within : 특정 타입 내의 조인 포인트를 매칭

 

3. args : 인자가 주어진 타입의 인스턴스인 조인 포인트

 

4. this : 스프링 빈 객체(스프링 AOP 프록시)를 대상으로 하는 조인 포인트

 

5. target : Target 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트

 

6. @target : 실행 객체의 클래스에 주어진 타입의 애너테이션이 있는 조인 포인트

 

7. @within : 주어진 애터네이션이 있는 타입 내 조인 포인트

 

8. @annotation : 메서드가 주어진 애너테이션을 가지고 있는 조인 포인트를 매칭

 

9. @args : 전달된 실제 인수의 런타임 타입이 주어진 타입의 애너테이션을 갖는 조인 포인트

 

10. bean : 스프링 전용 포인트컷 지시자이고 빈의 이름으로 포인트컷을 지정