반응형
저번 포스팅에서 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
반응형
'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 |
댓글