2014-05-16 69 views
0

我有這個切入點切入點,以配合特定的PARAMS標註的方法來註釋

@Pointcut("execution(@com.foo.bar.aspect.annotation.MyAnnotation* * (..))" 
      + "&& @annotation(annot)") 
public void anyFoo(MyAnnotation annot) 
{ 

} 

MyAnnotation看起來是這樣的:

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation 
{ 
    boolean isFoo(); 

    String name; 
} 

比方說,我詮釋的方法與此批註與isFoo設爲true

@MyAnnotation(isFoo = true, name = "hello") 
public void doThis() 
{ 
    System.out.println("Hello, World"); 
} 

如何編寫我的切入點以便它僅匹配方法註釋與MyAnnotaion AND isFoo = true

我試過,但它似乎沒有工作

@Pointcut("execution(@com.foo.bar.aspect.annotation.MyAnnotation(isFoo = true, *) * * (..))" 
      + "&& @annotation(annot)") 
public void anyFoo(MyAnnotation annot) 
{ 

} 
+0

此問題仍列爲未答覆。如果看起來合適,請您接受並提出我的答案嗎?謝謝。 – kriegaex

回答

2

你不能寫這樣一個切入點,因爲AspectJ的不支持它。您需要使用類似

@Pointcut("execution(@com.foo.bar.aspect.annotation.MyAnnotation* * (..))" 
      + "&& @annotation(annot)") 
public void anyFoo(MyAnnotation annot) { 
    if (!annot.isFoo()) 
     return; 
    // Only continue here if the annotation has the right parameter value 
    // ... 
} 
+0

對於同樣的想法+1:D 是的,我想到了,但我只是想知道是否有更好的方法來做到這一點。 – 0x56794E

相關問題