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

Posted

技术标签:

【中文标题】Wildfly 中的 @Dependent 范围不是默认值吗?【英文标题】:Is @Dependent scope not default in Wildfly? 【发布时间】:2014-10-18 17:50:21 【问题描述】:

我在使用 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 时,一切都像魅力一样。我错过了什么吗?这种行为是特定于野蝇的吗?希望你能帮忙,谢谢。

【问题讨论】:

【参考方案1】:

在 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) 的行为相同)。

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"

【讨论】:

以上是关于Wildfly 中的 @Dependent 范围不是默认值吗?的主要内容,如果未能解决你的问题,请参考以下文章

解释命令的 select_type 列中的 DEPENDENT UNION 是啥?

Wildfly 安全管理器不处理 JndiPermission

Wildfly 数据源中的空闲超时后未关闭数据库连接

为啥 Wildfly 10 在部署时给我“jdbc:postgresql 不允许空名称段”?

Docker 容器中的 Wildfly 未启动

wildfly 如何设置外网访问