AspectJ - 如何捕捉子类的构造函数调用?

AspectJ - How to catch constructor call also for subclasses?

我有一个摘要classFoo.

如果我创建一个将 Foo 扩展到名为 Bar.

的 Aspect 之外的具体 class 的新实例,我希望出现编译错误

我试过这个:

public pointcut errorcall(): call(Foo.new(..)) && !within(Bar);
declare error: errorcall():"Error: You must use Bar creation methods!";

但它没有捕获 Foo 的子 classes。

如果我将切入点声明为:

public pointcut errorcall(): call(ConcreteFoo.new(..)) && !within(Bar);

它捕获了 Bar 外部的 ConcreteFoo 创建,但我想拦截 Foo 的每个子class。

我该怎么做?

MyClass+ 符号也抓取子类。此信息可以在任何 AspectJ 教程中找到,例如here:

public pointcut errorcall():
  call(Foo+.new(..)) && !within(Bar);