这是注释:

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

这是一个带注释的类:
@MyAnnotation(name="foo")
public class ClassA {
    public ClassA() {
        // Do something
    }
}

这是第二个带注释的类:
@MyAnnotation(name="bar")
public class ClassB {
    public ClassB(String aString) {
        // Do something
    }
}

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

最佳答案

您的切入点应如下所示:

execution((@MyAnnotation *).new(..))

如果注释在另一个包中:

execution((@de.scrum_master.aop.demo.MyAnnotation *).new(..))

或者,如果您不想完全符合要求,请执行以下操作:

execution((@*..MyAnnotation *).new(..))

编辑:好的,在注释中提供有关您的问题的更多信息:

构造函数执行没有返回值,您可以在其中捕获

after() returning(Object myObject) : myJoinpoint()

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

after(Object myObject) returning : myJoinpoint() && this(myObject)

相反,如果您出于任何目的确实需要构造对象。

10-06 09:50