개발일기장
Spring Boot - AOP (1) 본문
728x90
공통 로직 분리를 위해서 사용함..
https://tlqckd0.tistory.com/105
Spring boot AOP에서는 proxy방식으로 사용한다 카던데 그래서 사용법도 비스므리함.
1. @Aspect, @Around
implementation 'org.springframework.boot:spring-boot-starter-aop'
요거 추가를 해줘야 한다.
@Aspect
@Slf4j
public class A {
@Around("execution(* {패키지이름}..*(..))")
public Object method(ProceedingJoinPoint joinPoint) throws Throwable{
return joinPoint.proceed();
}
}
Class에 @Aspect를 붙여주고
method에 @Around를 붙여서 Pointcut을 등록해주고 로직을 구현해주면 된다. 파라미터는 ProceedingJoinPoint
실제 method 실행은 joinPoint.proceed를 호출하면 된다.
2. Pointcut 분리
@Pointcut("execution({AOP 표현식})")
private void AA(){};
@Pointcut("execution({AOP 표현식})")
private void BB(){};
@Around("AA()")
public Object doAA(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
@Around("AA() && BB()")
public Object doBB(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
이렇게 Pointcut을 분리해서 사용 할 수도 있고 AOP 표현식에서 && (and), ||(or) , ! (not)을 사용해서 조합할 수도 있음.
# Pointcut class 분리
public class PP {
@Pointcut("execution({AOP 표현식})")
public void AA(){};
@Pointcut("execution({AOP 표현식}")
public void BB(){};
@Pointcut("AA() && BB()")
public void AAandBB(){}
}
이렇게 Pointcut을 모아둔 class를 만든 다음에 호출해서 사용할 수도 있다. (method는 public으로 해야함.)
@Around("패키지.PP.AA")
public Object doAA(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
@Around("패키지.PP.AAandBB")
public Object doAAandBB(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
3. AOP 순서 조절 @Order(n)
하나의 class 내부에서는 순서 조절을 할 수 없음..그냥 지맘대로임 그래서 클래스를 분리하면 됨
@Aspect
@Order(2)
public class AA {
@Around("???")
public Object doLogicAA(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
}
// 순서는 Class 단위로 설정이 가능하다..
@Aspect
@Order(1)
public class BB {
@Around("???")
public Object doLogicBB(ProceedingJoinPoint joinPoint) throws Throwable{
// 로직 수행
}
}
이렇게 하는 경우 AA, BB둘 다 해당하는 method의 경우 실행 시 BB 먼저 실행이 된다..
728x90
'Spring Boot' 카테고리의 다른 글
Spring Proxy Factory (1) | 2023.12.05 |
---|---|
Spring 모든 빈 검사하기.. (CommandLineRunner) (0) | 2023.08.14 |
Spring 공부 07. web scope, provider, proxy (0) | 2023.07.17 |
Spring 공부 06. singleton, prototype (0) | 2023.07.12 |
Spring 공부 05. Bean Life Cycle (0) | 2023.07.10 |
Comments