我开始深入研究在RCP应用程序中使用Spring DM和OSGi服务。我已经创建了一个服务,该服务由RCP应用程序中的另一个bundle使用。它通过使用显式包名称和服务类名称调用getBundleContext()。getServiceReference()来查找服务。我还没有在任何地方使用DI。我遇到的问题是请求包中返回的服务是单例。有时我注意到一个线程问题,因为它是一个“有状态”的服务。如何配置应用程序以在每次调用时返回新的服务实例?
这是我的spring xml文件内容,用于注册服务:
<bean id="myServBean" class="com.xyz.ClassImpl"/>
<osgi:service ref="myServBean" class="com.xyz.Class"/>
答案 0 :(得分:2)
OSGi服务通常可以由多个客户端同时调用。 OSGi开箱即用的唯一功能是使用ServiceFactory,它允许您为每个调用客户端包返回一个不同的实例。没有标准机制来为每个方法调用创建一个新实例。您必须自己在服务实现中处理它。