在我的系统中,我有两个场景:
是否可以使用CDI事件实现它?
答案 0 :(得分:1)
CDI仅提供广播样式/主题事件的功能。 CDI中没有事件过滤。
我能想到的唯一方法就是想出一个限定词。也许F
可以@Observes @A @B SomeObject
而Y
可以@Observes @C @B SomeObject
。当F
获得某个事件时,它可以使用@C @B
作为限定符来重新启动它。
答案 1 :(得分:0)
我会尝试在事件生成器和事件使用者之间创建某种代理:
class EventProducer{
@Inject private Event<EventObject> event;
public void produce(){
event.fire(new EventObject());
}
}
代理:
class EventsProxy{
@Inject private Event<EventObjectForY> event_1;
@Inject private Event<EventObjectForF> event_2;
void observe(@Observes EventObject){
if(eventObjectEligibleForF()){
EventObjectForF f = copyEventObjectToEventObjectForF();
event_2.fire(f);
}
EventObjectForY y = copyEventObjectToEventObjectForY();
event_2.fire(y);
}
}
消费者:
class EventConsumer{
public consume(@Observes EventObjectForY obj){
}
}
但请记住,这只是伪代码。