spring 3:从库中注入一个依赖项?

时间:2013-05-03 11:40:56

标签: java xml spring dependency-injection

我正在开发一个项目并使用第三方库。假设我使用的是一个给我ExtObj对象的库。在我的项目中,我有一个MyObj类,它使用ExtObj。如何配置弹簧3以在MyObj中注入ExtObj?

我试图在互联网上研究这个话题,但我找不到直接的答案。我想使用xml配置,可能是(?)@Autowired,而不是@EJB@Inject

提前致谢!

UPDATE 我的猜测是:

<bean id="myObj" value="me.MyObj">
  <property name="extObj" value=" ... ??? ...">
</bean>

所以,我不知道我应该投入什么。我猜这就是对外部对象的引用。但是spring只能引用已经在spring中定义/配置的对象。所以:

<bean id="extObj" value="ext.lib.ExtObj">
<bean id="myObj" value="me.MyObj">
  <property name="extObj" value="extObj">
</bean>

这种配置是对的吗?

2 个答案:

答案 0 :(得分:3)

首先,您需要在应用程序上下文中为ExtObj定义一个bean(一个xml文件或一个@Configuration类)。例如。如果ExtObj的构造函数采用String,则可以这样定义bean:

<bean id="extObj" class="ext.lib.ExtObj">
    <constructor-arg value="SomeString"/>
</bean>

要定义MyObj,您可以使用构造函数注入:

<bean id="myObj" class="me.MyObj">
    <constructor-arg ref="extObj"/>
</bean>

或setter注射:

<bean name="myObj" class="me.MyObj">
    <property name="extObj" ref="extObj"/>
</beans>

如果使用setter注入,那么MyObj需要有一个setter setExtObj。如果你使用构造函数注入MyObj需要一个构造函数来获取ExtObj类的实例。

答案 1 :(得分:1)

当然,您可以注入第三方库,只要它具有Spring可以访问的构造函数。

您可以使用XML或注释 - 您的选择。

您需要让Spring实例化库类的实例,然后将其注入需要它们的对象中。

每次创建使用JDBC驱动程序的Spring数据源时都会执行此操作。这是第三方图书馆。