복붙노트

[SPRING] 주석이있는 PRIVATE 메소드를위한 AspectJ pointcut

SPRING

주석이있는 PRIVATE 메소드를위한 AspectJ pointcut

특정 주석으로 주석이 달린 개인 메소드 용 Pointcut을 만들고 싶습니다. 그러나 애노테이션이 아래의 개인 메소드에있을 때 내 측면이 트리거되지 않습니다.

@Aspect
public class ServiceValidatorAspect {
    @Pointcut("within(@com.example.ValidatorMethod *)")
    public void methodsAnnotatedWithValidated() {
}

@AfterReturning(
            pointcut = "methodsAnnotatedWithValidated()",
            returning = "result")
    public void throwExceptionIfErrorExists(JoinPoint joinPoint, Object result) {
         ...
}

서비스 인터페이스

public interface UserService {

    UserDto createUser(UserDto userDto);
}

서비스 구현

    public class UserServiceImpl implements UserService {

       public UserDto createUser(UserDto userDto) {

             validateUser(userDto);

             userDao.create(userDto);
       }

       @ValidatorMethod
       private validateUser(UserDto userDto) {

            // code here
       }

그러나 공용 인터페이스 메서드 구현 createUser에 주석을 이동하면 내 측면이 트리거됩니다. 원래의 유스 케이스를 작동시키기 위해 pointcut을 정의하거나 aspect를 어떻게 설정해야합니까?

해결법

  1. ==============================

    1.8. Spring을 이용한 Aspect 지향 프로그래밍

    8. Spring을 이용한 Aspect 지향 프로그래밍

  2. ==============================

    2.AspectJ로 전환하고 권한있는 aspect를 사용하라. 또는 Spring AOP의 제한 사항을 수용 할 수 있도록 애플리케이션 디자인을 변경하십시오. 나의 선택은 훨씬 더 강력한 AspectJ가 될 것이다.

    AspectJ로 전환하고 권한있는 aspect를 사용하라. 또는 Spring AOP의 제한 사항을 수용 할 수 있도록 애플리케이션 디자인을 변경하십시오. 나의 선택은 훨씬 더 강력한 AspectJ가 될 것이다.

  3. from https://stackoverflow.com/questions/15093894/aspectj-pointcut-for-annotated-private-methods by cc-by-sa and MIT license