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

时间:2014-08-25 14:32:40

标签: 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(){}
}

我一直在:

  

在注入点使用限定符@Default的类型B的不满意依赖[BackedAnnotatedField] @Inject [...]

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

1 个答案:

答案 0 :(得分:7)

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

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

  1. 在B类上声明一个明确的范围(这就是你在放置@Dependent时所做的事情)
  2. 声明beans.xml文件,bean-discovery-mode属性设置为all。这将使您的存档中的所有bean都可用于注入(与Java EE 6(CDI 1.0)相同的行为)。
  3. 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"