我有一个抽象的超类:
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) {...}
但部署此wildfly会在部署期间抛出异常:
WELD-000404:@Dependent作用域bean无法声明条件观察者方法:[BackedAnnotatedMethod] public A.entityCreated(@Observes @Created EntityChangedEvent)
我知道我可以在没有notifyObserver
条件的情况下创建观察者,但这会产生影响,即CDI事件会创建并通知其他bean,我想阻止它。
有没有办法在泛型超类中使用notifyObserver
条件?或者我是否需要在没有条件的情况下使用它分别在具体的子类中实现它?
答案 0 :(得分:2)
只看CDI 1.2规范,section 10.4.4 Conditional observer methods:
范围为@Dependent的Bean可能没有条件观察者方法。
因此,你的请求在这方面是无效的,它无法工作。我可以看一眼的原因之一是@Dependent
bean不是正常范围的,基本上可以存在“在给定的上下文中”(注意引号)0-n次。因此,你会在通知中有一些含糊之处。相比之下,普通的scoped bean在给定的上下文中将存在0-1次,因此它非常简单。
因此,您必须坚持使用@Dependent
bean的非条件观察者方法。