IOC容器的對象實例化是經過配置文件來實現的。術語上這叫作注入。注入有兩種形式,採用構造方法注入和採用setter注入。具體的注入形式以下html
**************構造方法方式*******************java
UserManagerImpl類:node
配置文件代碼:程序員
****************setter方式*****************web
UserManagerImpl類:spring
配置文件代碼:sql
比較:app
1.構造方法:編輯器
對於依賴關係無須變化的Bean,構造注入更有用處;由於沒有setter方法,全部的依賴關係所有在構造器內設定,所以,不用擔憂後續代碼對依賴關係的破壞。依賴關係只能在構造器中設定,則只有組件的建立者才能改變組件的依賴關係。對組件的調用者而言,組件內部的依賴關係徹底透明,更符合高內聚的原則。ide
構造注入能夠在構造器中決定依賴關係的注入順序。
2,setter方法:
與傳統的JavaBean的寫法更類似,程序員更容易理解、接受,經過setter方式設定依賴關係顯得更加直觀、明顯;對於複雜的依賴關係,若是採用構造注入,會致使構造器過於臃腫,難以閱讀。Spring在建立Bean實例時,須要同時實例化其依賴的所有實例,於是致使死你功能降低。而使用設置注入,則避免這下問題;尤爲在某些屬性可選的狀況下,多參數的構造器更加笨拙。
【屬性編輯器】
Spring內置了一些屬性編輯器,能夠將一些普一般用的屬性注入,將Spring配置文件中的String類型轉換成相應的Java對象。例如一個類裏面的一個整型屬性,在配置文件中咱們是經過String類型的數字直接進行配置便可。以下示例:
Bean1類:
配置文件:
測試方法:
【自定義屬性編輯器】
Spring具備多個自定義編輯器,它們可以自動把注入的String值轉化爲更復雜的類型。例如Date類型,若是直接按照上面實例的方式進行配置,就會報錯以下:
org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'bean' defined in class path resource[applicationContext.xml]: Initialization of bean failed; nested exception isorg.springframework.beans.TypeMismatchException: Failed to convert propertyvalue of type [java.lang.String] to required type [java.util.Date] for property'date';
由於Spring沒有內置Date的屬性編輯器,須要咱們本身建立。建立過程:
1.編寫UtilDatePropertyEditor類,繼承PropertyEditorSupport,覆蓋setAsText()方法,其中text參數就是配置文件中的值。咱們的任務就是把text轉換成date類型的值。
2.將自定義的屬性編輯器注入到spring中,爲了方便管理咱們再新建一個配置文件applicationContext-editor.xml(測試時記得將該配置文件一同加載便可)