【发布时间】:2019-01-10 08:10:54
【问题描述】:
假设我有这样的事情:
@Component(immediate = true)
public class A {}
public class B {
@Reference
public void injectA(A a) {...}
}
如果我手动创建 B 的实例,有没有办法将 A 注入 B? 如果没有,是仅使用服务注册表的唯一替代方法还是有一个首选模式?
更新: 我无法手动注入 A 的实例(不使用服务注册表),因为创建 B 实例的代码没有它。
【问题讨论】:
-
对不起,如果我遗漏了一些明显的东西,但是...如果您想将 A 的实例注入 B,那么只需调用
injectA方法。 -
@NeilBartlett 感谢您的建议,我已经更新了我的问题。
-
问题还是不清楚,不好意思。您想将 A 注入 B 但您没有任何方法来创建 A?而且您不想去服务注册中心获得 A 吗?是不是这个测试代码,也许你正在寻找一种方法来创建一个模拟对象来注入?
-
显然你可以做到
new B().injectA(new A())。但是如果你想注入由 SCR 创建的 A 实例,你需要从服务注册表中获取该 A 实例,这是 SCR 使其可用的地方。 -
@BJHargrave 这就是我想知道的,即是否可以让 SCR 创建的实例自动注入,或者我是否必须从注册表中显式获取它。我应该在问题中说得更清楚。如果您将评论作为答案,我将很乐意接受。
标签: java osgi declarative-services