如何定义一个aspectj切入点,用于选择具有特定注释的类的所有构造函数?

Pin*_*est 3 constructor annotations aspectj pointcut

这是注释:

@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation {
    String name();
}
Run Code Online (Sandbox Code Playgroud)

这是一个带注释的类:

@MyAnnotation(name="foo")
public class ClassA {
    public ClassA() {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

这是第二个带注释的类:

@MyAnnotation(name="bar")
public class ClassB {
    public ClassB(String aString) {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个aspectj切入点,正确匹配ClassA和ClassB的构造函数,而不匹配任何其他未注释的类的构造函数MyAnnotation.

kri*_*aex 6

你的切入点应如下所示:

execution((@MyAnnotation *).new(..))
Run Code Online (Sandbox Code Playgroud)

如果注释位于另一个包中:

execution((@de.scrum_master.aop.demo.MyAnnotation *).new(..))
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想完全限定包:

execution((@*..MyAnnotation *).new(..))
Run Code Online (Sandbox Code Playgroud)

编辑:好的,在评论中有关于您的问题的更多信息:

构造函数执行没有可以捕获的返回值

after() returning(Object myObject) : myJoinpoint()
Run Code Online (Sandbox Code Playgroud)

这仅适用于方法.所以请使用

after(Object myObject) returning : myJoinpoint() && this(myObject)
Run Code Online (Sandbox Code Playgroud)

相反,如果你确实需要构造的对象用于任何目的.