【问题标题】:Injecting components in manually created instances在手动创建的实例中注入组件
【发布时间】: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


【解决方案1】:

显然你可以做 new B().injectA(new A())。但是,如果您想手动注入由 SCR 创建的 A 实例,则需要从服务注册表中获取该 A 实例,这是 SCR 使其可用的地方。

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2022-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2013-03-05
    • 2019-03-07
    • 1970-01-01
    • 2017-04-16
    相关资源
    最近更新 更多