@Dependent范围在Wildfly中不是默认的吗?

iku*_*iku 0 java java-ee cdi wildfly

我在使用Wildfly通过@Inject注入POJO时遇到了一些麻烦.文件明确指出:

@Dependent - 如果未指定,则为默认范围; 这意味着一个对象只存在一个客户端(bean),并且与该客户端(bean)具有相同的生命周期.

但是,当我有两个班级时:

@Singleton
@Startup
public class A{
    @Inject
    private B b;
}

public class B{
    public B(){}
}
Run Code Online (Sandbox Code Playgroud)

我一直在:

注入点上带有限定符@Default的类型B的不满意依赖[BackedAnnotatedField] @Inject [...]

当我添加@Dependent时,一切都像魅力一样.我错过了什么吗?这种行为是野生蝇特有的吗?希望你能帮忙,谢谢.

Ben*_*min 8

在Java EE 7(CDI 1.1)中使用CDI时,默认的bean发现模式是annotated.这意味着具有明确指定范围的任何bean都可用于注入.

因此,要使您的豆B可用于注射,您可以:

  1. 在B类上声明一个显式范围(这就是你在推杆时所做的@Dependent)
  2. 声明属性设置为的beans.xml文件.这将使归档中的所有bean都可用于注入(与Java EE 6(CDI 1.0)相同).bean-discovery-modeall

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>
Run Code Online (Sandbox Code Playgroud)

但是,我不建议使用bean-discovery-mode="all".