当前位置: 首页 > 知识库问答 >
问题:

在非组件类中注入OSGi服务

宦正诚
2023-03-14

我尝试的方法之一是在从MessageBusListener创建FlowListener实例的同时传递服务引用。然而,当参数化服务被停用和激活回来时,我认为OSGi服务将创建一个新的服务实例并绑定到MessageBusListener,但是FlowListener仍然会有一个过时的引用。

@Component
public class MessageBusListener
{
    private final AtomicReference<QueueExecutor> queueExecutor = new AtomicReference<>();

    @Activate
    protected void activate(Map<String, Object> osgiMap)
    {
        FlowListener f1 = new FlowListener(queueExeciutor)
    }

    Reference (service = QueueExecutor.class, cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC)
    protected void bindQueueExecutor(QueueExecutor queueExecutor)
    {
        this.queueExecutor = queueExecutor;
    }
}

public class FlowListener
{
    private final AtomicReference<QueueExecutor> queueExecutor;

    FlowListener(QueueExecutor queueExecutor)
    {
        this.queueExecutor = queueExecutor;
    }
    queueExecutor.doSomething() *// This would fail in case the QueueExecutor 
    service was deactivated and activated again*
}

期待其他方法,可以满足我的要求。

共有1个答案

车诚
2023-03-14

您的方法是正确的,您只需要在必要时处理停用。

如果QueueExecutor消失,MessageBuslistener将被关闭。您可以使用@deactivate方法来处理这个问题。在此方法中,您还可以调用FlowListener的sutdown方法。

如果出现了一个新的QeueExecutor服务,那么DS将创建一个新的MessageBuslistener,所以一切都应该很好。

@Reference
QueueExecutor queueExecutor;
 类似资料:
  • 在我的应用程序中,我有一个服务聊天原型客户端。该实现是一个tcp客户端,它在蓝图“init-method”中连接到远程服务器,并在“破坏方法”中断开连接。 我还有另一个捆绑包,它使用此ChatRogcolClient的连接从通道ChatChannel读取和发布消息。目前,我有一个xml文件,它创建了ChatProcolClient的bean,并创建了一个bean ChatChannel,其中注入了

  • 问题内容: 我是在暗示我的Android应用程序。我通过以下方式进行设置: AppComponent.java AppInjector.java AppModule.java 最后在 MyApplication.Java 中,我只是这样调用该方法: 所有这些工作以及我放入AppComponent模块中的所有内容都可以注入。 但是,在某些情况下,我需要一个依赖于for 的类,并且在各种地方都使用实用

  • 我正在我的Android应用程序中安装匕首2。我按以下方式进行设置: AppComponent。Java语言 应用njector.java 应用模块。Java语言 最后在我的应用程序中。Java在onCreate方法中,我只调用AppInjector,如下所示:

  • 问题内容: 我想将服务注入app.config,以便可以在调用控制器之前检索数据。我这样尝试过: 服务: 配置: 但是我得到这个错误: 错误:未知提供程序:EditorApp的dbService 如何更正设置并注入此服务? 问题答案: Alex提供了无法执行您要尝试执行的操作的正确原因,因此+1。但是您遇到此问题是因为您没有完全使用解决方案的设计方式。 接受服务或函数的字符串,返回要注入的值。由于

  • 问题内容: 我正在尝试将Dagger2用于DI,它对于存在onCreate生命周期事件的Activity / Fragment相关类非常有效。现在,我有一个普通的Java类,我想注入它。任何关于如何实现它的想法将不胜感激。我的代码如下所示: BasicMoviesUsecaseComponent.java- DatabaseModule.java- AppComponent.java- 这是我需要