【问题标题】:AspectJ - How to catch constructor call also for subclasses?AspectJ - 如何捕获子类的构造函数调用?
【发布时间】:2017-03-04 14:39:16
【问题描述】:

我有一个抽象类Foo

如果我创建一个将 Foo 扩展至名为 Bar 的方面之外的具体类的新实例,我希望出现编译错误。

我试过了:

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 的每个子类。

我该怎么做?

【问题讨论】:

    标签: java aop aspectj pointcut


    【解决方案1】:

    MyClass+ 表示法也包含子类。此信息可以在任何 AspectJ 教程中找到,例如here:

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

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2012-01-25
      • 2014-02-19
      • 2018-03-29
      • 1970-01-01
      相关资源
      最近更新 更多