我有一个抽象的超级类:
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
豆的非条件观察者方法。