禁止使用特定限定符观察CDI事件

时间:2017-02-23 19:40:54

标签: java events dependency-injection cdi

我有一个CDI事件(比如说没有任何限定符的eventA)被触发,eventA有几个消费者。在特殊情况下,我需要使用特定限定符(例如qualifierX)触发eventA。 现在,eventA的所有使用者将基本上接收eventA(使用和不使用qualifierX)。

我想保持消费者的行为,只观察没有qualifierX的eventA。

P.S。我不被允许修改每个消费者。

我考虑过使用子事件B扩展eventA并触发此事件,但这也会触发eventA观察者。

在CDI中有直接的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您希望您的消费者仅在没有限定符的情况下观察EventA,那么将其定义为@Observes @Default EventA。根据您的说法,他们现在必须@Any事件 - 因此只要有效负载类型适合,他们就会收到事件。

关于扩展 - 无法工作,EventB仍然会有EventA类型,因此会通知原始观察者。但是,如果您可以更改EventA,则可以创建超类MyEvent)并拥有EventA extends MyEvent。然后使用MyEvent 触发事件将不会通知原始观察者