带注释的方法或带注释的类中的方法的切入点

带注释的方法或带注释的类中的方法的切入点,第1张

注释方法或带注释的类中的方法的切入点

不完全是,但是差不多。您将需要两个切入点,两个建议,但是您可以将工作委托给一个方法。看起来像这样:

@Aspectpublic class AnyAspectName {    @Pointcut("execution(@X * *.*(..))")    void annotatedMethod() {}    @Pointcut("execution(* (@X *).*(..))")    void methodOfAnnotatedClass() {}    @Around("annotatedMethod() && @annotation(methodLevelX)")    public Object adviseAnnotatedMethods(ProceedingJoinPoint pjp, X methodLevelX)  throws Throwable {        return aroundImplementation(pjp, methodLevelX);    }    @Around("methodOfAnnotatedClass() && !annotatedMethod() && @within(classLevelX)")    public Object adviseMethodsOfAnnotatedClass(ProceedingJoinPoint pjp, X classLevelX)  throws Throwable {        return aroundImplementation(pjp, classLevelX);    }    public Object aroundImplementation(ProceedingJoinPoint pjp, X annotation)  throws Throwable {        return pjp.proceed();    }}

请注意,除了将

@annotation()
@within()
切入点分开之外,我还对结果切入点添加了限制,以使它们不会太宽。我想您想要 方法执行
连接点,所以我添加了所需的切入点表达式,将其限制为方法执行。他们是匹配的

  1. @X
    在第一个建议中 ,在任何包中的任何类中的任何类中以任何返回类型 注释的任何方法的执行
  2. 在带有
    @X
    _第二个 _注释的任何类中具有返回类型的任何方法的执行

进一步的限制

@within(X)
@annotation(X)
派上用场,因为
@within(X)
它本身会匹配

在类型中使用类型注释定义关联代码的任何连接点

X

其中包括 方法执行方法调用构造函数执行构造函数调用预初始化静态初始化初始化字段集
字段get异常处理程序 类型连接点(并非所有连接点都对 周围的建议 )。同样,

@annotation(X)
本身意味着

主题具有类型注释的任何连接点

X

这也可能意味着前面提到的大多数连接点,具体取决于注释的目标类型。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5487090.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存