java - 是否可以将依赖项 CDI 与 Wildfly 一起使用?

标签 java jboss cdi wildfly-swarm

我习惯了 Spring 框架依赖注入(inject)之类的东西,所以我对 JBoss 真的很陌生。我可能想做一些不可能的事情。

在我们公司,我们从一个具有所有依赖注入(inject)的原型(prototype)开始。我们有一个类是这样声明的:

@ApplicationScoped
public class MessageHandlerImpl implements MessageHandler {
    ...
}

我将它注入(inject)到另一个类中,如下所示:

@ApplicationScoped
public class MessageReceiverImpl implements MessageReceiver {

    @Inject
    MessageHandler messageHandler;
    ...

}

原型(prototype)已被接受,现在我们正在组织这个项目,隔离核心项目上的一些公共(public)代码。

在我们将其分离之前,这些注入(inject)工作正常。关于此问题的更多详细信息已在以下问题上询问:Ambiguous dependency with only one @ApplicationScoped class

我退后一步,考虑也许我正在做的事情对于 Wildfly-swarm 来说是不可能的,或者我正在尝试的整个概念是错误的。

我想做的是在我的核心项目上完成所有 CDI,并且仅在我的依赖项目上将其与 @Inject 注释一起使用。所以在我的依赖项目中我会有类似的东西:

@ApplicationScoped
public class WSClient {

    @Inject
    MessageReceiver messageReceiver;

    ...

}

嗯,这不起作用,因为我得到了一个不明确的依赖关系,正如您在我链接的问题上看到的那样。我想知道我是否应该做的是使用生产者或类似的东西。谁能启发我一个有效的方法,或者也许是替代方案?

最佳答案

当您想要以某种可能不同的方式实例化一个类型,然后将其交给 CDI 说“嘿,如果有人注入(inject)这种类型,给他这个实例”(当然是非常简化的版本)时,就会使用生产者)。根据您的描述,您应该足以完成简单的注入(inject)和 bean 创建,我认为不需要生产者。

从你的两个问题中,我可以看出注入(inject)实际上是有效的,但存在一些含糊之处。我的意思是一个注入(inject)点有多个可能的候选点。仅在您的情况下,它们是相同的,这意味着该类必须以某种方式在某个地方加载了两次 - 继续朝这个方向挖掘。

从架构的角度来看,使用 CDI 完全可以(我想说很常见)将核心提取为 CDI 库,然后由项目的其他部分使用。只要确保您的所有文件都被视为“bean 文件”即可。实现这一目标的最简单方法是确保在其中包含 beans.xml

关于java - 是否可以将依赖项 CDI 与 Wildfly 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47651029/

相关文章:

java - JBoss7 上 EAR 之间的 EJB 注入(inject)

Java EE 部署问题

java - 用java 1.6.0_45编译的jar可以在java 1.6.0环境中运行吗?

java - 如何在我的 Web 服务器 URL 中隐藏 .jsp 扩展名

java - 数组开头的额外元素

jboss - 如何配置 Eclipse (Kepler) 以使用 Wildfly

java - Maven 安装目标 - JBoss - java.net.ConnectException : JBAS012144: Could not connect to remote://localhost:9999. 连接超时

java - 在 spring security 访问被拒绝处理程序中确定所需权限的正确方法

java - jboss 7.1项目部署类未找到

dependency-injection - 可以在 Weld 中控制类路径扫描吗?