代码之家  ›  专栏  ›  技术社区  ›  Georg Leber

@Dependent bean中的CDI观察者条件

  •  1
  • Georg Leber  · 技术社区  · 6 年前

    我有一个抽象的超类:

    public abstract class A<T extends Other> extends B {...}
    

    定义的另一个类 @ViewScoped @Named 正在扩展:

    public class C extends A<OtherSub> implements Serializable {...}
    

    到目前为止,这还没有问题。

    现在我想在超类中添加observer方法 A 一般处理CDI事件,例如:

    public void entityCreated(@Observes(notifyObserver = Reception.IF_EXISTS) @Created EntityChangedEvent event) {...}
    

    但部署此wildfly会在部署期间引发异常:

    WELD-000404:条件观察者方法不能由@Dependent scoped bean声明:[BackedAnnotatedMethod]public a.entityCreated(@Observes@Created EntityChangedEvent)

    我知道我可以创建没有 notifyObserver 条件,但这有一个效果,即在CDI事件发生时将创建并通知其他bean,这是我想要阻止的。

    有没有办法使用 notifyObserver 泛型超类中的条件?或者我需要在没有该条件的情况下使用它,分别在具体的子类中实现它吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Siliarus    6 年前

    看看CDI 1.2规范, section 10.4.4 Conditional observer methods :

    scope为@Dependent的bean可能没有条件观察者方法。

    因此,您的请求在这方面无效,无法工作。我之所以能看到这一点,原因之一是 @Dependent bean不是普通的作用域,基本上可以“在给定的上下文中”(注意引号)存在0-n次。因此,您在通知中会有一些模糊性。相比之下,普通范围的bean在给定的上下文中会存在0-1次,所以这非常简单。

    因此,对于您的 @从属的 豆。