OSGI - 在新对象中注入 bean

OSGI - Inject bean in new object

我可能没有完全掌握 bean 和服务的概念,但我所有的研究都让我一无所获。

在我的 OSGI 项目中,我得到了一个提供服务的包 A(称为 myService)。

捆绑包 B 在 bean(称为 myBean)中使用此服务,该 bean 也作为服务公开。

Bean 和服务声明在 Blueprint 中完成。

目前,包A和B都被Karaf解析,接线正常

但是我的 bundle B 有另一个 bean(称为 myOtherBean),也公开为服务,动态创建新对象。这些对象(称为 MyObject)必须对 bean myBean.

有引用

我怎样才能通过参考?

一个简单的方法是将引用放在我的 bean myOtherBean 中并通过 MyObject 的构造函数注入它。但我想知道是否有另一种方法可以做到这一点。有人建议在 MyObject 中使用 @Inject 注释,但我无法使其工作。

听起来你有一个工厂模式并且想要将创建的 bean 注入到声明的 bean 中。正确的?

如果是,请参阅:https://www.ibm.com/developerworks/library/os-osgiblueprint/

 <bean id=”accountFactory” class=“org.apache.geronimo.osgi.AccountFactory”>  
       <argument value=”account factory”/>      
   </bean>

   <bean id=”accountThree”
         factory-ref=“accountFactory” 
         factory-method=“createAccount”>   
       <argument value=”3”/>
       <property name=”description” value=”#3 account”/>      
   </bean>

我认为在构造函数中传递服务是一个很好的方法。可以使用工厂,但如果您想在代码中创建对象,则很难使用蓝图工厂。 您可以通过注入蓝图上下文并从中手动检索对象来实现,但这非常难看。