禁止观察具有特定限定符的 CDI 事件
Suppress observing a CDI event with a specific qualifier
我有一个 CDI 事件(比如没有任何限定符的 eventA)被触发,eventA 有几个消费者。在特殊情况下,我需要使用特定限定符(比如 qualifierX)触发 eventA。
现在,eventA 的所有消费者基本上都会收到 eventA(有和没有 qualifierX)。
我想保持我的消费者只观察没有限定符 X 的事件 A 的行为。
P.S。我不允许修改每个消费者。
我考虑过使用子 eventB 扩展 eventA 并触发此 eventB,但这也会触发 eventA 观察器。
在 CDI 中有直接的方法吗?
如果您希望您的消费者只观察 EventA
而没有限定符,那么您 应该 将它们定义为 @Observes @Default EventA
。根据您的说法,它们现在绑定到 @Any
事件 - 因此 只要有效负载类型适合 ,它们就会收到事件。
关于扩展 - 这不会起作用,EventB
的类型仍然是 EventA
,因此它会通知原来的观察者。但是,如果您可以更改 EventA
class、,您可能会创建一个超级 class (MyEvent
) 并具有 EventA extends MyEvent
.然后使用 MyEvent
触发事件将不会通知原始观察者 .
我有一个 CDI 事件(比如没有任何限定符的 eventA)被触发,eventA 有几个消费者。在特殊情况下,我需要使用特定限定符(比如 qualifierX)触发 eventA。 现在,eventA 的所有消费者基本上都会收到 eventA(有和没有 qualifierX)。
我想保持我的消费者只观察没有限定符 X 的事件 A 的行为。
P.S。我不允许修改每个消费者。
我考虑过使用子 eventB 扩展 eventA 并触发此 eventB,但这也会触发 eventA 观察器。
在 CDI 中有直接的方法吗?
如果您希望您的消费者只观察 EventA
而没有限定符,那么您 应该 将它们定义为 @Observes @Default EventA
。根据您的说法,它们现在绑定到 @Any
事件 - 因此 只要有效负载类型适合 ,它们就会收到事件。
关于扩展 - 这不会起作用,EventB
的类型仍然是 EventA
,因此它会通知原来的观察者。但是,如果您可以更改 EventA
class、,您可能会创建一个超级 class (MyEvent
) 并具有 EventA extends MyEvent
.然后使用 MyEvent
触发事件将不会通知原始观察者 .