观察多个CDI事件?

时间:2013-09-30 14:24:33

标签: java java-ee cdi

是否可以在同一种方法上观察多个CDI事件?

示例(当然不起作用):

private void listener(@Observes ChangeEvt1 || @Observes ChangeEvt2) {

}

有没有办法不创建两个侦听器方法然后调用相同的方法?

2 个答案:

答案 0 :(得分:3)

不,这不在规范中,抱歉。做这样的事情的最好方法是创建两个方法,然后让它们调用私有方法或类似的东西。

我也没有看到这一点也得到了规范的支持。只要有Observer,该方法的任何参数都将成为Bean Manager必须满足的注入点。即使它确实有效,你也会得到null任何一个参数,所以很难知道哪个事件实际被解雇了。

答案 1 :(得分:0)

至少在JBoss 7.1.3上这是不可能的。我必须承认,我检查了这个稍微不同的方法签名:void listener(@Observes ChangeEvt1, @Observes ChangeEvt2)。我天真的想法是容器会将不必要的参数设置为null(实际上它不会产生意义)。 JBoss未能以“不能有多个带注释的事件参数@Observes”开头。

但即使您的方法签名有效,您仍需要检查已传递的参数。这种方法并不能真正简化这一点。