2013-07-22 3 views
0

인수 목록에 관계없이 클래스의 모든 공용 메소드와 일치하는 Spring @AspectJ 점 컷 (@Pointcut) 표현식은 어떻게 작성합니까?Spring @AspectJ @ 인수 목록에 관계없이 일치시킬 포인트 컷

나는 모든 (다른 사람이 a previous SO question에서 원하는 것을 유사) 특정 주석, @MyAnnotation이 특정 클래스의 공개 방법에 대한 @AfterThrowing 포인트 컷을 갖는 측면을합니다. 현재 내 측면이 같다 :

@Aspect 
public final class ServiceDataAccessExceptionReporter { 

    @Pointcut("execution(public * com.example.Service.*(..)) && @annotation(com.example.MyAnnotation))") 
    public void annotatedMethod() {} 

    @AfterThrowing(pointcut = "annotatedMethod()", throwing = "exception") 
    public void reportException(final DataAccessException exception) { 
     ... 
    } 
} 

이클립스 스프링 플러그이 아니라 정확하게 방법 com.example.Service.getNames() 조언 (소스 코드 윈도우의 화살표 주석을 사용하여)를 나타낸다. 그러나 인수가있는 메서드 (예 : com.example.Service.getTimes(String name))가 권고되었음을 나타내는 것은 아닙니다.

@Pointcut 주석이있는 메소드에는 인수가 없으므로 그런가요? 인수 목록에 관계없이 포인트 컷을 모든 메서드로 만들려면 어떻게해야합니까? 또는 com.example.Service 클래스의 각 인수 목록에 대해 별도의 @Pointcut을 사용해야합니까?

답변

0

결과 WAR를 테스트하면 애스펙트가 실제로 작동한다는 것을 알 수 있으며 내 서비스 클래스의 포인트 인하하려는 모든 메소드가 포인트 컷이라는 것을 알 수 있습니다.

사실 이것은 실제로 Eclipse Spring 플러그인의 결함이라는 결론을 내렸다. @Pointcut이 여러 위치와 일치 할 때 모든 조인 포인트를 표시하지 않고 대신 임의로 선택하는 하나만 표시한다.

관련 문제