2013-05-03 66 views
0

我正在開發一個項目並使用第三方庫。比方說,我使用一個庫給我的對象ExtObj。在我的項目中,我有一個MyObj類,它使用ExtObj。我如何配置spring 3在MyObj中注入ExtObj?春季3:從庫中注入依賴項?

我試圖研究互聯網上的話題,但我沒有找到直接的答案。我想用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> 

這樣的配置是否正確?

+0

http://www.mkyong.com/spring/spring-dependency-injection-di/ – sanbhat 2013-05-03 11:43:32

回答

3

首先,您需要在應用程序上下文(xml文件或@Configuration類)中爲您的​​定義一個bean。例如。如果​​有一個構造採取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 injection,那麼MyObj需要有一個setter setExtObj。如果您使用構造函數注入MyObj需要有一個構造函數以​​類的實例。

+0

+1 - 這解釋了它。 Spring必須創建外部對象和你的外部對象才能將它們連接在一起。 – duffymo 2013-05-03 12:17:36

1

當然,你可以注入第三方庫,只要它具有Spring可以訪問的構造函數。

您可以使用XML或註釋 - 您的選擇。

您需要問Spring以實例化庫類的實例,然後將其注入到需要它們的對象中。

您每次創建使用JDBC驅動程序的Spring數據源時都會這樣做。這是第三方圖書館。

+0

也許我的問題其實是 - 我必須在一些spring xml配置文件中定義外部對象嗎? – user1414745 2013-05-03 11:57:16

+0

我不知道這意味着什麼,但是如果你想讓你的對象注入第三方對象,你必須給Spring控件並告訴它如何爲你創建它們。 – duffymo 2013-05-03 12:16:52