【发布时间】:2015-07-14 17:12:49
【问题描述】:
由于 CDI 更改,我们在 Widfly 中遇到了奇怪的注入问题。我们有接口
public interface Command<I, O> {
}
很多类都是这样实现这个接口的
public class ApproveUserRequests implements Command<ApproveUserRequestsRequest, List<String>> {
}
应用程序侦听器类喜欢获取所有可用类的列表并像这样使用注入
@Inject
private Instance<Command<I, O>> mActions;
但是,mActions 返回的实例始终为空。调试源码后发现获取所有实例列表的唯一方法是使用
@Inject
private Instance<Command<?, ?>> mActions;
我们在使用泛型类型时也遇到了注入问题,但是使用通配符类型帮助了我们。 - 查看更多信息:https://developer.jboss.org/thread/256783#sthash.1s6tuXsR.dpuf
【问题讨论】:
-
请通过缩进 4 个空格或用反引号括起来来标记您的代码。这样一来,您就可以避免代码发布后出现错误和有趣的问题。另外你的两次注射看起来一样,第二次似乎没有什么不同?
-
注明。第二个不同,我们使用通配符查找(?,?)。第一个使用 .
-
通配符比以前的版本有意义。泛型中的通配符表示任何类型,因此如果您想要所有类型,则使用 anytype 泛型进行注入。我根本没有在这里看到任何奇怪的东西。预期行为
-
没错,但是那个通配符可以让你得到任何类型,但我不明白为什么注入类型 Command 不起作用。有很多类实现 Command .注意,这曾经在 Jboss 7.1.1 中工作,它使用 CDI 规范 1.1 和旧版本的 WELD。我不确定 Wildfly 8.2.0.Final 中新版本的 WELD 和 CDI 1.2 发生了什么变化
-
您的问题缺少上下文:
Instance<Command<I,O>>带有未绑定的类型变量甚至无法编译。
标签: jboss cdi wildfly wildfly-8 weld