aspectj 不拦截注释 class 的构造函数

aspectj not intercepting constructors where class is annotated

我想拦截所有 class 带有特定注释的构造函数调用。

我有这样的相位:

@Aspect
public class ConstructorClassLevelAspect {
  @Before(
      "execution(*.new(..)) && @annotation(ConstructorClassLevel)")
    public void doConstructorClassLevel(
      JoinPoint point) throws Throwable {
    System.out.println("constructed" + point);
  }
}

还有一个实例:

@ConstructorClassLevel
public class ConstructorClassLevelExample {

}

现在,如果我更改方面并删除 @annotation 过滤器,那么我会看到 aspectj 正在拦截调用。此外,如果我创建一个默认构造函数,然后用注释对其进行注释,它也可以工作。

但是,我希望注释存在于 class 上,这样如果我有 1 个或 10 个构造函数,它们都会被相同地拦截(我只需要将它放在 class).

看来如果我执行@within(ConstructorClassLevelExample),它就可以工作!