본문 바로가기
IT/Java

aop pointcut 정리

by 성준하이 2023. 5. 14.
반응형

저번 포스팅에서 aop 설정법에 대해서 다룬적이 있다.

 

자세한 내용은 아래 참고 포스팅을 참고 바란다.

 

사용법은 다음과 같다.

 

먼저 @Aspect를 선언할 클래스를 만들어준다.

 

@Aspect
@Component
public class AopTracker {
.... 코드 구현
}

 

@Component 역시 spring bean 주입을 위해 작성을 해줘야한다.

 

그리고 이어서 aspect 내에서 실행 할 메서드를 만들고 그 메서드에 아래와 같은 annotation을 달아준다.

 

annotation 사용(호출)
@Pointcut 어떤 메서드 일때
@Before 메서드 실행 전
@After 메서드 실행 후
@AfterReturning 메서드 정상 실행후
@AfterThrowing 메서드 실패 실행후
@Around 메서드 전후

 

그리고 annotation의 값은 아래의 설명과 같다.

(예시)

// 모든 공개 메서드 실행
execution(public * *(..))


// set 다음 이름으로 시작하는 모든 메서드 실행
execution(* set*(..))


// AccountService 인터페이스에 의해 정의된 모든 메서드의 실행
execution(* com.xyz.service.AccountService.*(..))


// service 패키지에 정의된 메서드 실행
execution(* com.xyz.service.*.*(..))


// 서비스 패키지 또는 해당 하위 패키지 중 하나에 정의된 메서드 실행
execution(* com.xyz.service..*.*(..))


// 서비스 패키지 내의 모든 조인 포인트
within(com.xyz.service.*)


// 서비스 패키지 또는 하위 패키지 중 하나 내의 모든 조인 포인트
within(com.xyz.service..*)


// AccountService 프록시가 인터페이스를 구현하는 모든 조인 포인트
this(com.xyz.service.AccountService)


// AccountService 대상 객체가 인터페이스를 구현하는 모든 조인 포인트
target(com.xyz.service.AccountService)


// 단일 매개변수를 사용하고 런타임에 전달된 인수가 Serializable과 같은 모든 조인 포인트
args(java.io.Serializable)


// 대상 객체에 @Transactional 애너테이션이 있는 모든 조인 포인트
@target(org.springframework.transaction.annotation.Transactional)


// 실행 메서드에 @Transactional 애너테이션이 있는 조인 포인트
@annotation(org.springframework.transaction.annotation.Transactional)


// 단일 매개 변수를 사용하고 전달된 인수의 런타임 유형이 @Classified 애너테이션을 갖는 조인 포인트
@args(com.xyz.security.Classified)


// tradeService 라는 이름을 가진 스프링 빈의 모든 조인 포인트
bean(tradeService)


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

 

코드 호출 예제는 아래와 같다.

@Before(pointcut = "execution(public * *(..))")
public void function1(JoinPoint jp){
...
}

@AfterReturning(pointcut = "@annotation(org.springframework.web.bind.annotation.PostMapping)", returning = "result")
public void function2(JoinPoint jp, Object result) throws JsonProcessingException {
...
}

첫번째 메서드는 모든 public 에서 모든 메서드를 실행 전에 

두번째 메서드는 PostMapping 이 annotation으로 달려있는 모든 메서드에.

그리고 return 은 result라는 이름으로 받게 된다.


참고 포스팅

https://thenicesj.tistory.com/564

 

springboot AOP 설정하기

자바에서 aop 에 대해서 이전 포스팅에서 다룬 글이 있다. 자세한 사항은 아래 참고 포스팅 참고 바란다. 이번 포스팅에서는 springboot 에 aop 설정하는법에 대해서 다뤄 볼것이다. 개발 환경 springboo

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

@Data annotation 과 getter 의 관계(23.05.24)  (30) 2023.05.25
aop pointcut 정리(추가 정리)  (62) 2023.05.15
springboot AOP 설정하기  (35) 2023.05.13
[Map]getOrDefault 사용법 및 예제  (25) 2023.05.12
ACCEPT_SINGLE_VALUE_AS_ARRAY json format  (33) 2023.05.08

댓글