2014-02-19 56 views
0

我開始閱讀一本關於Spring和我一直在問自己一個問題:與Spring定義豆

是什麼使用Spring表達式語言定義豆之間在春季的XML文件,並在Java中的正常方式的區別類。例如,我們有兩個等同的實現:

<bean id="carl" class="springinaction.springidol.Instrumentalist" > 
<property name="song" value="#{kenny.song}" /> 
</bean> 

Instrumentalist carl = new Instrumentalist(); 
carl.setSong(kenny.getSong()); 

時候和爲什麼我應該使用的一種方式,而不是另外一個呢?

+0

可能重複[什麼是依賴注入?](http://stackoverflow.com/questions/130794/what-is-dependency-injection) – andyb

+0

您尚未提供任何上下文。 ''元素定義了一個名爲'Instrumentalist'的名爲'carl'的新bean,其屬性名稱爲'song',指的是另一個名爲'kenny'的bean的屬性。這個bean只有'ApplicationContext'的含義。您在上下文中顯示的Java代碼並不能解釋任何內容。你只是創建一個對象並調用它的一個方法,通過在另一個對象上調用另一個方法傳入返回值的值。 –

回答

1
<bean id="carl" class="springinaction.springidol.Instrumentalist" > 
<property name="song" value="#{kenny.song}" /> 
</bean> 

此代碼,包括在適當的Spring配置文件上,將產生一個Spring管理對象。默認情況下,Spring bean的範圍是單例,只有一個實例,可以使用ApplicationContext#getBean方法訪問。

Instrumentalist carl = new Instrumentalist(); 
carl.setSong(kenny.getSong()); 

此代碼,包括在適當的Java方法,將在JVM堆創建一個實例,其可以通過可變卡爾訪問。只要有變量引用它,該實例就會存在。那麼垃圾收集就可以選擇了。

0

如果你問依賴注入,你應該閱讀這

總結依賴注入,它是圍繞依賴型轉變的模式。您不需要直接在應用程序類中創建依賴項,而是將它們移動到管理它們的組件。這個組件通常被稱爲控制反轉容器,這就是Spring provides primarily。您可以使用XML來完成此任務,也可以使用Java來完成此任務。換句話說,儘管您正在改變依賴關係,但可以在運行時(使用XML)或編譯時(使用Java)來定義它們。

如果你問爲什麼用XML配置的上下文和Java,那麼答案之一是,你不必重新編譯源代碼,如果你使用XML來更改配置。 chrylis也帶來了一些好點。 XML不安全(但我從來沒有遇到過問題)。

但是,有一些配置很難處理XML。 Spring聲明的XML模式是限制性的,迫使你使用一些編碼約定。使用Java配置,您沒有這些限制。您可以以任何您想要的方式創建對象。

+0

但你仍然通常不得不重建你的包裝,它不是類型安全的。 – chrylis

+0

@chrylis我的意思是選擇你的bean類。在XML中,您只需更改bean'class'屬性和任何''字段。在Java中,你必須重新編譯整個配置類(es)。 –

+0

你認爲給教程的地址一個正確的答案? – Andres

相關問題