我在使用 Wildfly 通过 @Inject 注入 POJO 时遇到一些麻烦。文档明确指出:
@Dependent - 如果未指定,则默认范围;这意味着一个对象的存在只是为一个客户端(bean)提供服务,并且与该客户端(bean)具有相同的生命周期。
但是,当我有两节课时:
@Singleton
@Startup
public class A{
@Inject
private B b;
}
public class B{
public B(){}
}
我不断得到:
在注入点 [BackedAnnotatedField] @Inject [...] 处带有限定符 @Default 的类型 B 的依赖关系不满足
当我添加 @Dependent 时,一切都像魅力一样。我错过了什么吗?这种行为是野蝇特有的吗?希望你能帮忙,谢谢。
在 Java EE 7 (CDI 1.1) 中使用 CDI 时,默认的 bean 发现模式为annotated
。这意味着任何具有明确指定范围的 bean 都可用于注入。
因此,要使您的 bean B 可用于注射,您可以:
- 声明 B 类的显式作用域(这就是您在放置时所做的事情)
@Dependent
)
- 声明一个
beans.xml
文件与bean-discovery-mode
属性设置为all
。这将使存档中的所有 bean 都可用于注入(与 Java EE 6 (CDI 1.0) 的行为相同)。
The beans.xml
文件必须位于META-INF
文件夹,看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1"
bean-discovery-mode="all">
</beans>
但是,我不建议使用bean-discovery-mode="all"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)