본문 바로가기

Programming

[Spring] AOP 사용 예시 (@Pointcut @Around aspectj)

@EnableAspectJAutoProxy

@EnableAspectJAutoProxy
@SpringBootApplication
public class TestApplication {
...
}

최상위 패키지의 클래스에 @EnableAspectJAutoProxy 어노테이션 추가 필요.

@Aspect

aspect(공통 관심사)를 적용할 빈에 @Aspect 어노테이션을 추가해준다.

@Pointcut  @Around 예시

@Pointcut("execution(* aaa.bbb.ccc.*Service.*Ddd(..))")
private void servicePointcutDdd() {}

@Pointcut("execution(* aaa.bbb.ccc.*Service.*Eee(..))")
private void servicePointcutEee() {}

@Around("servicePointcutDdd() || servicePointcutEee()")
public Object testAround(ProceedingJoinPoint jp) throws Throwable{
    // jp 실행 전
    Object rt = jp.proceed();
    // jp 실행 후
    return rt;
}

Pointcut은 Join point를 표현식으로 나타낸다. 반환 유형에 관계없이 aaa.bbb.ccc 패키지의 Service로 끝나는 클래스의 Ddd로 끝나는 함수의 모든 매개변수에 해당하며, Pointcut을 지정 후 Around에서 공통으로도 이용할 수 있다.

  • @Pointcut
  • * : 모든 유형 
  • (..) : 모든 매개변수
  • Join Point는 aspect의 동작이 실행되는 특정 시점

참조
https://docs.spring.io/spring-framework/docs/2.5.5/reference/aop.html

반응형