[Spring] Pointcut 표현식

zini9188·2023년 2월 9일
0

Spring

목록 보기
11/33

포인트컷과 표현식 & 지시자

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

@Pointcut("execution(* 패키지명..*(..))")
private void anyOldTransfer() {}

포인트컷 지시자

execution의 빈도가 매우 높고 나머지는 자주 사용하지 않음

종류설명
execution메서드 실행 조인트 포인트를 매칭하며 스프링 AOP에서 가장 많이 사용하며 기능도 복잡
within특정 타입 내의 조인 포인트를 매칭
args인자가 주어진 타입의 인스턴스인 조인 포인트
this스프링 빈 객체(스프링 AOP 프록시)를 대상으로 하는 조인 포인트
targetTarget 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트
@target실행 객체의 클래스에 주어진 타입의 애너테이션이 있는 조인 포인트
@within주어진 애너테이션이 있는 타입 내 조인 포인트
@annotation메서드가 주어니 애너테이션을 가지고 있는 조인 포인트를 매칭
@args전달된 실제 인수의 런타임 타입이 주어진 타입의 애너테이션을 갖는 조인 포인트
bean스프링 전용 포인트컷 지시자이고 빈의 이름으로 포인트컷을 지정

포인트컷 표현식 결합

포인트컷 표현식은 &&, ||, !를 사용하여 결합할 수 있음

@Pointcut("execution(public * *(...))")
private void anyPublicOperation() {}

@Pointcut("within(패키지명..*)")
private void inTrading() {}

@Pointcut("anyPulbicOperation() && inTrading()")
private void tradingOperation() {}
  • anyPublicOperation는 메서드 실행 조인 포인트가 공용 메서드의 실행을 나타내는 경우 일치

  • inTrading는 메서드 실행이 거래 모듈에 있는 경우에 일치

  • tradingOperation는 메서드 실행이 거래 모듈의 공개 메서드를 나타내는 경우 일치

일반적인 포인트컷 표현식 예시

  • 모든 공개 메서드 실행
`execution(public * *(..))`
  • set 다음 이름으로 시작하는 모든 메서드 실행
`execution(* 패키지명.service.AccountService.*(..))`
  • AccountService 인터페이스에 의해 정의된 모든 메서드의 실행
`execution(* 패키지명.service.AccountService.*(..))`
  • service 패키지에 정의된 메서드 실행
 `execution(* 패키지명.service.*.*(..))`
  • 서비스 패키지 또는 해당 하위 패키지 중 하나의 정의된 메서드 실행
`execution(* 패키지명.serviece..*.*(..))`
  • 서비스 패키지 내의 모든 조인 포인트 (스프링 AOP에서만 메서드 실행)
within(패키지명.service *)
  • 서비스 패키지 또는 하위 패키지 중 하나 내의 모든 조인 포인트 (Spring AOP에서만 메서드 실행)
within(패키지명.service..*)
  • AccountService 프록시가 인터페이스를 구현하는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)
this(패키지명.service.AccountService)
  • AccountService 대상 객체가 인터페이스를 구현하는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)
target(패키지명.service.AccountService)
  • 단일 매개변수를 사용하고 런타임에 전달된 인수가 Serializable과 같은 모든 조인 포인트 (Spring AOP에서만 메소드 실행)
args(java.io.Serializable)
  • 대상 객체에 @Transactional 애너테이션이 있는 모든 조인 포인트 (Spring AOP에서만 메서드 실행)
@target(org.springframework.transaction.annotation.Transactional)
  • 실행 메서드에 @Transactional 애너테이션이 있는 조인 포인트 (Spring AOP에서만 메서드 실행)
@annotation(org.springframework.transaction.annotation.Transactional)
  • 단일 매개 변수를 사용하고 전달된 인수의 런타임 유형이 @Classified 애너테이션을 갖는 조인 포인트(Spring AOP에서만 메서드 실행)
@args(패키지명.security.Classified)
  • tradeService 라는 이름을 가진 스프링 빈의 모든 조인 포인트 (Spring AOP에서만 메서드 실행)
bean(tradeService)
  • 와일드 표현식 *Service 라는 이름을 가진 스프링 빈의 모든 조인 포인트
bean(*Service)
profile
백엔드를 지망하는 개발자

0개의 댓글