2016-05-26 31 views
0

我可能没有完全掌握bean和服务的概念,但是我所有的研究都没有把我引向任何东西。OSGI - 在新对象中注入bean

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

一个包B在一个也作为服务公开的bean中使用此服务(称为myBean)。

豆类和服务声明在Blueprint中完成。

现在,卡拉夫解决了捆绑包A和B,布线也没问题。

但我的软件包B有另一个bean(称为myOtherBean),也作为服务公开,它动态地创建新的对象。这些对象(称为MyObject)必须对bean myBean有引用。

我怎么能通过参考?

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

回答

1

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

+0

注入蓝图上下文是我想要避免的。仅供参考,使用DS等其他类型的依赖注入API会更容易吗? – jhamon

+0

我不认为这可以在DS中完成。为什么使用普通的java代码创建对象是一个问题? –

+0

其实这不是问题,因为你回答我的问题,但我只是想知道一般的知识,如果有任何种类的依赖注入API能够做到这一点 – jhamon

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> 
+0

您的解决方案不适用于我的情况。我将以一个豆厂的工厂结束,但我的问题是一样的。我不会从我的代码中获取bean。更确切地说,我从数据库中获取未确定数量的对象,并且对于每个对象,我需要实例化另一种使用服务的对象。 – jhamon