Spring中實現IOC的方式:依賴注入(Dependency Injection)
1:Spring中依賴注入的兩種方式:
(1):通過 setter 方法注入:
<property name=“ ” ></property>
其中,name屬性的取值依setter方法名而定,要求這個類里面這個對應的屬性必須有setter方法
(2):通過構造方法注入:
<constructor-arg index=””></ constructor-arg>
其中,index表示構造方法中的參數索引(第一個參數索引為0)
要求這個類里面必須有想對應的構造方法
2:二者使用區別:
spring依賴注入之構造注入的優點:
構造注入可以再構造器中決定依賴關系的注入順序,優先依賴的優先注入。
對于依賴關系無須變化的Bean,構造注入更有用處;因為沒有setter方法,所有的依賴關系全部在構造器內設定,因此,不用擔心后續代碼對依賴關系的破壞。
依賴關系只能在構造器中設定,則只有組件的創建者才能改變組件的依賴關系。對組件的調用者而言,組件內部的依賴關系完全透明,更符合高內聚的原則;
建議采用以設置注入為主,構造注入為輔的注入策略。對于依賴關系無須變化的注入,盡量采用構造注入;而其他的依賴關系的注入,則考慮采用設置注入。
constructor : 可以在構建對象的同時,把依賴關系也構建好。對象創建好就準備好的所有的資源。安全性高。
spring依賴注入之設置注入的優點:
setter : 建立的對象關系(參數)很多。創建完對象之后再同過set()方法進行設定。
與傳統的JavaBean的寫法更相似,程序員更容易理解、接受,通過setter方式設定依賴關系顯得更加直觀、明顯;
對于復雜的依賴關系,如果采用構造注入,會導致構造器過于臃腫,難以閱讀。Spring在創建Bean實例時,需要同時實例化其依賴的全部實例,因而導致死你功能下降。而使用設置注入,則避免這下問題;
尤其在某些屬性可選的情況下,多參數的構造器更加笨拙。
Spring 鼓勵使用setter的方式注入。