spring是一個開源架構,是為了解決企業應用程式開發的複雜性而建立的,為j2ee應用程式開發提供內建的架構。簡單來說,spring是一個輕量級的控制反轉ioc和面向切面aop的容器架構。spring架構會對定義在配置檔案中的bean執行個體自動管理,這個bean也就是java執行個體,java元件,spring既可以管理标準的javabean,又可以管理普通的java元件。
spring架構包含許多特征,并被很好的組織在如下六大子產品中:
spring架構中,最基礎,最核心的功能是控制反轉ioc,面向切面和聲明式事物等功能都依賴于控制反轉的實作,為了實作控制反轉的功能,
spring提供了兩個通路接口。
spring中實作ioc的兩種接口介紹
org.springframework.beans.factory.beanfactory:bean工廠,借助配置檔案能夠實作對javabean的配置和管理,用于向使用者提供bean執行個體。
org.springframework.context.applicationcontext:applicationcontext建構在beanfactory的基礎上,提供了更多的實用功能。
配置檔案代碼如下:
分别使用以上兩種方法裝載配置檔案,進行對比:
一,使用beanfactory
二,使用applicationcontext
兩種測試運作結果是一緻的:
ssh開發
李白
某出版社
70
那麼,在開發中到底選擇哪個接口更合适呢?
spring對象屬性的注入方式有兩種:設值注入和構造注入。
1.設值注入:
2.構造注入:
兩者的差別和使用場景:
在過去的開發過程中,這兩種注入方式都是非常常用的。spring也同時支援兩種依賴注入方式:設值注入和構造注入。 這兩種依賴注入的方式,并沒有絕對的好壞,隻是适應的場景有所不同。 相比之下,設值注入有如下優點:
設值注入需要該bean包含這些屬性的setter方法
與傳統的javabean的寫法更相似,程式開發人員更容易了解、接收。通過setter方法設定依賴關系顯得更加隻管。
對于複雜的依賴關系,如果采用構造注入,會導緻構造器國語臃腫,難以閱讀。spring在建立bean執行個體時,需要同時執行個體化器依賴的全部執行個體,因而導緻性能下降。而使用設值注入,則能避免這些問題
尤其是在某些屬性可選的情況況下,多參數的構造器顯得更加笨重
構造注入也不是絕對不如設值注入,在某些特定的場景下,構造注入比設值注入更加優秀。構造注入有以下優勢:
構造注入需要該bean包含帶有這些屬性的構造器
構造注入可以在構造器中決定依賴關系的注入順序,優先依賴的優先注入。例如,元件中其他依賴關系的注入,常常要依賴于datasrouce的注入。采用構造注入,可以在代碼中清晰的決定注入順序。
對于依賴關系無需變化的bean,構造注入更有用處。因為沒有setter方法,所有的依賴關系全部在構造器内設定。是以,無需擔心後續的代碼對依賴關系産生破壞。
依賴關系隻能在構造器中設定,則隻有元件的建立者才能改變元件的依賴關系。對元件的調用者而言,元件内部的依賴關系完全透明,更符合高内聚的原則。
建議:采用以設值注入為主,構造注入為輔的注入政策。對于依賴關系無需變化的注入,盡量采用構造注入;而其他的依賴關系的注入,則考慮采用設值注入。