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