2017-02-23 29 views
0

我有一个CDI事件(说eventA没有任何限定符)被触发,eventA有几个使用者。在特殊情况下,我需要使用特定的限定符(比如qualifierX)来触发eventA。 现在,eventA的所有消费者基本上都会收到eventA(带和不带qualifierX)。禁止观察具有特定限定符的CDI事件

我想保持我的消费者只有在没有限定符X的情况下观察eventA的行为。

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

我想过用eventB展开eventA并让eventB被触发,但这也会触发eventA观察者。

在CDI中有直接的方法吗?

+0

如果您希望消费者仅观察没有限定符的'EventA',则应该将它们定义为'@Observes @Default EventA'。根据你所说的,他们现在被绑定到“@ Any”事件 - 因此只要有效载荷类型适合,他们就会收到事件。 **关于扩展** - 不会工作,'EventB'仍然会有'EventA'类型,因此它会通知原始观察者。 **但是,如果您可以更改'EventA'类**,则可以创建一个超类('MyEvent')并让'EventA扩展MyEvent'。然后用'MyEvent'触发一个事件将*不*通知原始观察者。 – Siliarus

+0

您也可以编写一个查找“ProcessObserverMethod”并修改限定符的CDI扩展。 –

+0

@Siliarus我想我会用这个解决方案。谢谢 –

回答

0

如果你想你的消费者只观察EventA没有预选赛,比你应该有他们定义为@Observes @Default EventA。从你说的话来看,他们现在必然会遇到@Any事件 - 因此只要有效载荷类型适合,他们就会收到事件。

关于延伸 - 那不行,EventB仍然会有EventA的类型,因此它会通知原始观察者。但是,如果您可以更改EventA类,,则可以创建一个超类MyEvent)并拥有EventA extends MyEvent。然后发射事件MyEvent将不会通知原观察员