2011-12-12 2 views
1

이 pointcut의 형식 문제는 무엇입니까?Pointcut not well 서식이 적용됨

@Around("execution(* @myPackage.SafetyCritical.*(*))&& @annotation(deny)") 

.I 추가하는 것을 잊었다 : 기대 '이름 패턴'

(마지막 닫는 대괄호 & & 전) 포인트 컷이 클래스와 함께 작동합니다 예제 : 예외가 포인트 컷은 잘 형성되지 않습니다 "입니다 :

@SafetyCritical 
public class SecureClass 
{ 

    public SecureClass(){ 

    } 
    @Deny 
    public void isNotAllowed(){ 
     System.out.println("This should not happen"); 

    } 

    @Allow 
    public void isAllowed(){ 
     System.out.println("Allowed"); 

    } 

} 

답변

1

편집 :

난 당신이 찾고있는 pointcut 표현이 더 같이있을 거라고 생각 :

@Around("@target(myPackage.SafetyCritical) && @annotation(denyPackage.Deny)") 

@target 지정자 주어진 annoation로 표시된 클래스를 일치시키는 데 사용되며, @annotation 지정자 주석 방법으로 필터링합니다 denyPackage.Deny 주석을 사용합니다.

또 다시 Spring Documentation regarding AspectJ support을 통한 검토가 도움이 될 것입니다.

ORIGINAL :

에서, execution 포인트 컷 지정자에 전달 된 매개 변수를 정의해야한다 인수의 수에 일치하기 위해 '..'

@Around("execution(* myPackage.SafetyCritical.*(..)) && @annotation(deny)") 

Spring documentation은 몇 가지 예를 가지고 이것을 사용하여 임의의 수의 인수를 수락 함을 나타냅니다.

또한 패키지 이름 앞에 '@'기호가있는 것은 허용되지 않습니다. 제거해야합니다.

내가 주석과 일치하는이 같은 포인트 컷 정의를 사용했습니다
+0

이 이유없는 –

+0

음, 구문 분석 예외는 때때로 잘못된 방향을 가리킬 수 있습니다. 제안을 시도 했습니까? –

+0

예. 왜 "@"를 떠났어? SafetyCritical은 주석입니다 –

0

:

@Around("execution(@myPackage.SafetyCritical * *(..)) && @annotation(deny)") 

마지막 부분 @annotation(deny) (당신이 이미 알고 있지만, 일부 다른 사람들은하지 않을 수 있습니다처럼) advice 메소드에 주석을 결합하는 것입니다 인수는 "deny"입니다.

편집 : 업데이트에 따라 SafetyCritical이 클래스의 주석 이었음을 알지 못했습니다. 나는 그 다음 대상()의 슛이 witin 것입니다 가정 :

@Around("execution(* *(..)) && @target(myPackage.SafetyCritical) && @annotation(deny)")