gpt4 book ai didi

java - 直接或在继承接口(interface)中注释的切入点匹配方法?

转载 作者:行者123 更新时间:2023-11-30 11:51:32 24 4
gpt4 key购买 nike

考虑这个 @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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com