如何获取返回类型X的生成器方法的ProcessBean事件通知?

时间:2018-02-02 22:25:13

标签: java generics cdi type-resolution

A(有效)CDI producer method是这样的:

@Produces public Integer fortyTwo() {  return Integer.valueOf(42); }

... not 由(有效)便携式扩展程序container lifecycle event observer method观察到,如下所示:

private final void processBean(@Observes final ProcessBean<Integer> event) { /* ?! */ }

......或者这个:

private final void processBean(@Observes final ProcessBean<? extends Number> event) { /* ?! */ }

......或者这个(不足为奇):

private final void processBean(@Observes final ProcessBean<Object> event) { /* obviously */ }

...但 是由以下人员观察到的:

private final void processBean(@Observes final ProcessBean<?> event) { /*...*/ }

...此时toString()的{​​{1}}输出为:

event.getBean().getTypes()

specification says“包[class java.lang.Number, class java.lang.Integer, interface java.io.Serializable, class java.lang.Object, java.lang.Comparable<java.lang.Integer>] 中的事件对象类型取决于发现了什么类型的bean”。它特别指出“[f]或具有bean类javax.enterprise.inject.spi的bean的方法返回类型T的生成器方法,容器必须引发类型为X的事件。”然后它列出了其他一些具体的事件类型,似乎应该涵盖所有基础。

尽管如此,仍然有ProcessProducerMethod<T, X>接口,它是ProcessBean(它们可以使它成为规范详细说明的具体事件的实现细节,因此“禁止”),因此,似乎应该直接观察到这一点。不幸的是,正如所指出的,我发现编写 观察public的容器生命周期事件观察器方法的唯一方法是观察ProcessBean而不是其他人。

我发现这一切都非常令人惊讶。这是飞行员错误还是Weld中的错误(我正在使用的CDI实现)?如果我想收到给定类型的每个bean的通知,我该怎么办,无论它是托管bean,会话bean,合成bean,生产者方法还是生产者字段?

0 个答案:

没有答案
相关问题