我有一个CDI事件(比如说没有任何限定符的eventA)被触发,eventA有几个消费者。在特殊情况下,我需要使用特定限定符(例如qualifierX)触发eventA。 现在,eventA的所有使用者将基本上接收eventA(使用和不使用qualifierX)。
我想保持消费者的行为,只观察没有qualifierX的eventA。
P.S。我不被允许修改每个消费者。
我考虑过使用子事件B扩展eventA并触发此事件,但这也会触发eventA观察者。
在CDI中有直接的方法吗?
答案 0 :(得分:0)
如果您希望您的消费者仅在没有限定符的情况下观察EventA
,那么应将其定义为@Observes @Default EventA
。根据您的说法,他们现在必须@Any
事件 - 因此只要有效负载类型适合,他们就会收到事件。
关于扩展 - 无法工作,EventB
仍然会有EventA
类型,因此会通知原始观察者。但是,如果您可以更改EventA
类,则可以创建超类(MyEvent
)并拥有EventA extends MyEvent
。然后使用MyEvent
触发事件将不会通知原始观察者。