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