当前位置: 首页 > 知识库问答 >
问题:

@依赖bean中的CDI观察者条件

百里弘致
2023-03-14

我有一个抽象超类:

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

用< code>@ViewScoped和< code>@Named定义的另一个类扩展了一个:

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

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

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

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

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

WELD-000404:条件观察者方法不能由@Dependent范围的 Bean 声明:[后退注释方法] 公共 A.实体创建(@Observes @Created实体已更改事件)

我知道我可以创建观察者而没有通知观察者条件,但这有一个效果,即其他bean将在CDI事件时被创建和通知,我想阻止这一点。

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

共有1个答案

柴琦
2023-03-14

只要看看CDI 1.2规范,第10.4.4节条件观测器方法:

范围为@Dep的Bean可能没有条件观察者方法。

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

因此,对于< code > @ Dependent bean,您必须坚持使用非条件观察器方法。

 类似资料:
  • 依赖关系观察器机制允许您将侦听器注册到依赖关系中。功能实际上是Observator模式的实现。当依赖关系改变其状态(UP或DOWN)时,可以应用一些自定义逻辑。 如何激活 Spring Cloud Zookeeper依赖关系功能需要启用从依赖关系观察器机制中获利。 注册听众 为了注册一个监听器,你必须实现一个接口org.springframework.cloud.zookeeper.discove

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 我们支持使用分布式消息系统,例如 etcd 来保持多个Casbin执行器实例之间的一致性。 因此,我们的用户可以同时使用多个Casbin 执行器来处理大量的权限检查请求。 与策略存储 adapters类似,我们没有把watcher的代码放在主库中。 任何对新消息系统的支持都应该作为watcher程序来实现。 完整的Casbin watchers列表如下所示。 欢迎任何第三方对 watcher 进行

  • 我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven

  • ORM类底层提供了Observer支持,可以在数据更新、删除、插入时通知观察者。 $user1 = Model('User')->get(1); $user1->attach(new \App\Observer\UserUpdate()); $user->mobile = '18948735886'; $user->save(); 观察者类 namespace App\Observer; cl

  • 什么是观察者? - 观察者是由 Observable 发送的值的消费者。观察者只是一组回调函数的集合,每个回调函数对应一种 Observable 发送的通知类型:next、error 和 complete 。下面的示例是一个典型的观察者对象: var observer = { next: x => console.log('Observer got a next value: ' + x),