【问题标题】:Aspectj default constructor pointcutAspectj 默认构造函数切入点
【发布时间】:2015-08-04 11:36:35
【问题描述】:

我正在使用一些 AspectJ 代码,我想捕获所有非私有切入点的执行。

@Pointcut("execution(public * *(..))")//Public
public void publicMethod(){};
@Pointcut("execution(protected * *(..))"//Protected
public void protectedMethod(){}

@Pointcut("@annotation(mypackage.name.annotationName")
public void annotationPointcut(){}

@Around("annotationPointcut() && (protectedMethod() || publicMethod())")
public Object test(){ System.out.println("Should not print private"); }

我读到了关于使用 ! (不)但无法让它工作。 类似的东西

@Pointcut("!execution(private * *(..))"

但没有让它工作。

我在 aspectJ 中找不到默认类修饰符的修饰符名称,是我错过了还是需要尝试使用 !没有以某种方式登录?

感谢正在学习 aspectJ 的新开发者

【问题讨论】:

    标签: java annotations aop aspectj pointcut


    【解决方案1】:

    尝试这个来捕获所有非私有方法。

    @Pointcut("execution(!private * *(..))")
    

    【讨论】:

    • 这是正确的,但我想添加一个解释为什么!execution(private * *(..)) 是错误的:它的意思是“拦截所有不是私有方法执行的连接点”。虽然这确实拦截了公共、受保护和包本地方法的执行,但它也拦截了更多的切入点,例如方法调用(与执行不同)、构造函数调用和执行、静态和方法构造函数初始化、成员获取/设置访问等等。因此,您获得的点击次数过多。这就是为什么 wheee 是对的而 Nosfert 不是的原因。
    • 甜蜜!这都是关于在哪里!标志应该是! :)
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2023-03-20
    • 1970-01-01
    • 2010-10-30
    • 2014-05-15
    相关资源
    最近更新 更多