4

是否可以用一种相同的方法观察多个 CDI 事件?

示例(当然不起作用):

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

}

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

4

2 回答 2

4

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

我也没有看到规范支持这一点。任何时候你有一个观察者,那个方法的任何参数都会成为 Bean 管理器必须满足的注入点。即使它确实有效,您也会获得null任何参数,因此很难知道实际触发了哪个事件。

于 2013-09-30T21:27:38.090 回答
0

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

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

于 2013-09-30T15:05:05.117 回答