我在使用Wildfly通过@Inject注入POJO时遇到了一些麻烦。文件明确指出:
@Dependent - 如果未指定,则为默认范围;它意味着一个对象只存在一个客户端(bean),并且与该客户端(bean)具有相同的生命周期。
但是,当我有两个班级时:
@Singleton
@Startup
public class A{
@Inject
private B b;
}
public class B{
public B(){}
}
我一直在:
在注入点使用限定符@Default的类型B的不满意依赖[BackedAnnotatedField] @Inject [...]
当我添加@Dependent时,一切都像魅力一样。我错过了什么吗?这种行为是野生蝇特有的吗?希望你能帮忙,谢谢。
答案 0 :(得分:7)
在Java EE 7(CDI 1.1)中使用CDI时,默认的bean发现模式为annotated
。这意味着任何具有明确指定范围的bean都可以注入。
因此,要使您的豆B可用于注射,您可以:
@Dependent
时所做的事情)beans.xml
文件,bean-discovery-mode
属性设置为all
。这将使您的存档中的所有bean都可用于注入(与Java EE 6(CDI 1.0)相同的行为)。 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"
。