这是注释:
@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)
相反,如果您出于任何目的确实需要构造对象。