CDI观察者条件在 @依赖性bean中



我有一个抽象的超级类:

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

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

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

到目前为止,这没问题。

现在,我想在超级类A中添加观察者方法,以便处理CDI事件,例如:

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

但是部署这种野生蝇在部署过程中引发了例外:

WELD-000404:条件观察者方法无法通过 @依赖的范围bean声明:[BackedAnnotatedMethod] public A.EntityCreated( @observes @created entityChangedEntityChangedEvent(

我知道我可以在没有notifyObserver条件的情况下创建观察者,但这具有效果,即在CDI事件上创建并通知其他豆类,我想预防。

有什么方法可以在通用超级类中使用notifyObserver条件?还是我需要在没有该条件的情况下使用它在混凝土子类中实现它?

仅查看CDI 1.2规格,第10.4.4节条件观察者方法:

bean具有范围@DEPENTENT的bean可能没有有条件的观察者方法。

因此,您的请求在这方面是无效的,并且无法正常工作。我可以瞥了一眼的原因之一是@Dependent bean并不正常,基本上可以"在给定的上下文中"(请注意引号(0-N时代。因此,您对通知有歧义。相比之下,在给定的上下文中,普通范围的bean将存在0-1时间,因此它很简单。

因此,您必须坚持使用@Dependent豆的非条件观察者方法。

最新更新