考虑这个 @PointCut
,如果一个方法被 @Secure
注释注释,它会被触发:
@Pointcut("execution(@Secure * *(..)) && @annotation(secure)")
public void accessOperation(final Access access) { }
这非常适用于以下方法:
class Foo {
@Secure
public void secureMethod() { }
}
但是是否有可能有一个 Pointcut
当注解只存在于像这样的父类(super class)/接口(interface)中时也会被触发?
interface Foo {
@Secure
public void secureMethod();
}
class SubFoo implements Foo {
@Override
public void secureMethod() { // <--- execution of this method should be caught
/* .... */
}
}
编辑:
这似乎与以下内容密切相关:@AspectJ pointcut for subclasses of a class with an annotation
唯一的区别是他们使用类级别的注释,而我需要方法级别的注释。
最佳答案
我不知道 AspectJ 在这种情况下如何处理注解,但如果他只检查实现类的某个注解,并且该注解仅在类实现的接口(interface)上找到,Java 将报告事实上该注释不存在于类方法中。你应该用@Inherited 来注释你的注解:
http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Inherited.html
也许这可以解决问题(尽管在这种情况下您应该确保您的 Advice 不会被多次调用)。
关于java - 直接或在继承接口(interface)中注释的切入点匹配方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7379933/