AspectJ - 如何为子类捕获构造函数调用?

时间:2017-03-04 14:39:16

标签: java aop aspectj pointcut

我有一个抽象类Foo

如果我创建一个在名为Bar的Aspect之外扩展Foo的具体类的新实例,我想要编译错误。

我试过了:

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

但它没有捕获Foo的子类。

如果我将切入点声明为:

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

MyClass+表示法还会抓取子类。这些信息可以在任何AspectJ教程中找到,例如here

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