我尝试的方法之一是在从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*
}
期待其他方法,可以满足我的要求。
您的方法是正确的,您只需要在必要时处理停用。
如果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- 这是我需要