【发布时间】:2017-12-05 10:13:19
【问题描述】:
我已经习惯了 Spring 框架依赖注入之类的东西,所以我对 JBoss 非常满意。我可能想做一些不可能的事情。
在我们公司,我们从一个原型开始,其中包含所有依赖注入。我们有一个这样声明的类:
@ApplicationScoped
public class MessageHandlerImpl implements MessageHandler {
...
}
然后我将它注入到另一个类中,如下所示:
@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 说“嘿,如果有人注入这个类型,给他这个实例”( c) 的非常简化的版本。所以在你的情况下,一个简单的注入就足够了,我认为不需要生产者,它实际上可以工作,但有一些歧义,这意味着该类必须以某种方式在某个地方加载了两次 - 继续朝那个方向挖掘。跨度>
-
@Siliarus 我正在努力。非常感谢您的意见,我理解您所说的制片人,现在我更清楚了。从架构的角度来看呢?将这些 CDI 注释放在我的核心上,使其特定于技术是否不错?我真的不知道 JBoss 有什么好的做法。
-
将内核分离是非常好的,是的,您可以这样使用 CDI。事实上,这很常见。只需确保所有单独的 JAR 都是 bean 档案(例如,最简单的方法是在其中包含
beans.xml)——我想你有,否则这些 bean 不会被检测到。 -
@Siliarus 再次感谢您,如果您想将您的 cmets 作为答案,我会接受。
标签: java jboss cdi wildfly-swarm