是否可以将依赖 CDI 与 wildfly 一起使用?

Is it possible to make use of a dependency CDI with wildfly?

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

在我们公司,我们从一个原型开始,它上面有所有的依赖注入。我们有一个 class 以这种方式声明:

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

然后我将它注入到另一个 class 中,如下所示:

@ApplicationScoped
public class MessageReceiverImpl implements MessageReceiver {

    @Inject
    MessageHandler messageHandler;
    ...

}

原型已被接受,现在我们正在组织这个项目,将一些通用代码隔离在核心项目上。

在我们将其分离之前,这些注射工作正常。在这个问题上询问了有关此问题的更多详细信息:Ambiguous dependency with only one @ApplicationScoped class

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

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

@ApplicationScoped
public class WSClient {

    @Inject
    MessageReceiver messageReceiver;

    ...

}

好吧,这行不通,因为正如您在我链接的问题上看到的那样,我得到了不明确的依赖关系。我想知道我应该做的是使用 Producer 还是类似的东西。谁能告诉我一个有效的方法,或者替代方法?

当您想以某种可能不同的方式实例化一个类型,然后将其交给 CDI 说 "Hey, if someone injects this type, give him this instance"(当然是非常简化的版本)时,会使用生产者。根据您的描述,您应该足够好地使用普通注入和 bean 创建,我认为不需要生产者。

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

从体系结构的角度来看,使用 CDI 完全可以(我会说很常见)将核心提取为 CDI 库,然后供项目的其他部分使用。只需确保您的所有档案都被视为 "bean archives"。实现这一目标的最简单方法是确保在其中包含 beans.xml