带注释的类的子类的 @AspectJ 切入点

发布于 2024-11-30 07:57:24 字数 344 浏览 1 评论 0原文

我正在寻找一个与类中的方法执行相匹配的切入点,该类使用特定注释对类进行子类化。优秀的 AspectJ 备忘单 帮助我创建了以下切入点:

within(@my.own.annotations.AnnotationToMatch *) && execution(* *(..))

这匹配带有 @AnnotationToMatch 的类 A 的所有方法调用,但不匹配扩展 A 的类 B 的方法。我如何匹配两者?

I'm looking for a pointcut that matches method executions in classes that subclass a class with a specific annotation. The excellent AspectJ cheat sheet helped me to create the following pointcut:

within(@my.own.annotations.AnnotationToMatch *) && execution(* *(..))

This matches all method calls of a class A that carries the @AnnotationToMatch, but not method of a class B that extends A. How can I match both?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

作妖 2024-12-07 07:57:24
public aspect AnnotatedParentPointcutAspect {   

//introducing empty marker interface
declare parents : (@MyAnnotation *) implements TrackedParentMarker;

public pointcut p1() : execution(* TrackedParentMarker+.*(..));

before(): p1(){
    System.out.println("Crosscutted method: "
            +thisJoinPointStaticPart.getSignature().getDeclaringTypeName()
            +"." 
            +thisJoinPointStaticPart.getSignature().getName());
}
}
public aspect AnnotatedParentPointcutAspect {   

//introducing empty marker interface
declare parents : (@MyAnnotation *) implements TrackedParentMarker;

public pointcut p1() : execution(* TrackedParentMarker+.*(..));

before(): p1(){
    System.out.println("Crosscutted method: "
            +thisJoinPointStaticPart.getSignature().getDeclaringTypeName()
            +"." 
            +thisJoinPointStaticPart.getSignature().getName());
}
}
桃扇骨 2024-12-07 07:57:24

另一种更简单的可能性是将注释声明为 @Inherited - 因此它也适用于子类。

Another and simpler possibility is to declare the annotation as @Inherited - thus it applies to the subclasses as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文