我可能没有完全掌握豆类和服务的概念,但我所有的研究都没有把我带到任何地方。
在我的OSGI项目中,我得到了一个提供服务的包A
(称为myService
)。
bundle B
在bean(称为myBean
)中使用此服务,该bean也作为服务公开。
Beans和服务声明在Blueprint中完成。
目前,捆绑A和B都由Karaf解决,接线正常。
但我的bundle B有另一个bean(名为myOtherBean
),也作为服务公开,它动态创建新对象。这些对象(称为MyObject
)必须具有bean myBean
的引用。
我怎样才能传递参考?
一种简单的方法是将引用放在我的bean myOtherBean
中,并通过MyObject
的构造函数注入它。但我想知道是否有另一种方法可以做到这一点。有人建议在@Inject
中使用MyObject
注释,但我无法使其有效。
答案 0 :(得分:1)
我认为在构造函数中传递服务是一种很好的方法。可以使用工厂,但如果要在代码中创建对象,则很难使用蓝图工厂。 您可以通过注入蓝图上下文并手动从中检索对象来实现,但这非常难看。
答案 1 :(得分:0)
听起来你有一个工厂模式,并希望将创建的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>