??????Spring通常被稱為是構造Java工程的輕量級框架。這其中包含了兩方面的內容:首先,你可以使用Spring構造各種Java工程,而不是像Apache的Struts那樣,僅僅局限于Web工程。其次,所謂輕量級框架,并不是指類的數量或是工程的規模是輕量級的,用Spring的話說,輕量級就意味著更少的影響,你可以很容易的修改你的程序來獲得Spring提供的各種好處,也可以很容易的從你的工程中去除Spring。當然,需要注意的是,這僅僅是指Spring的核心組件。Spring還提供了很多其它的組件,像數據訪問等,使用這些組件,將使得你的工程與Spring框架形成耦合,但是,相比于你獲得的好處而言,這些耦合根本算不得什么。
????? Spring框架的核心是基于控制反轉(Invdersion Of Control, IOC)理論的,控制反轉使得我們可以在外部來創建和管理組件之間的依賴關系。例如:類Foo依賴于一個Bar類型的實例來執行某些操作,傳統的方式是,Foo使用new關鍵字或者從某個工廠類來創建一個Bar類的實例。然而,使用控制反轉,一個Bar類型的實例將在運行時由外部程序提供。這種方式可以很形象的看作是在運行時,將依賴的組件實例注入到當前組件中。因此,在某些時候,控制反轉也被稱為依賴注入(Dependency Injection, DI)。在Spring中,你可以認為控制反轉就等同于依賴注入。
????? 依賴注入給我們帶來的好處包括:
????? 1.減少了組件關聯的代碼:你不再需要在組件內部自己創建需要使用的其它組件,它們會在運行時自動被注入進來,特別是當某些組件需要通過JNDI來獲得,或是根本無法直接獲得,例如遠程資源時,DI帶來的好處就更加明顯了。
????? 2.將依賴關系移到代碼外:這會帶來兩點好處,首先,你可以在外部方便的管理組件間的依賴關系,而不需要重新編譯代碼。其次,你可以方便的切換某些依賴的實現類,例如將PostgreSQL的DAO實現切換為Oracle的DAO實現。
????? 3.統一的依賴管理:傳統的散布在工程各處的管理依賴關系的代碼將不復存在,所有的依賴信息都集中在一個統一的地方,這使得維護變得容易,同時降低了發生錯誤的可能。
????? 4.提高了可測試性:你可以很容易的替換依賴類的實現方式,如使用mock實現來代替真正的實現方式。假設我們需要測試業務對象(Business Object, BO),我們就可以使用mock實現來代替真正的DAO實現,從而避免真正地訪問數據庫,這大大提高了測試的效率。
????? 5.遵循良好的設計方式:使用DI通常意味著遵循面向接口的設計方式。毫無疑問,面向接口是一種良好的設計方式。
????? Spring框架還包括了以下這些方面的內容:
????? 1.面向方面的編程(Aspect Oriented Programming, AOP)
????? 2.數據訪問(Accessing Data in Spring)
????? 3.事務管理(Managing Transactions)
????? 4.簡化J2EE的整合(Simplifying and Integrating with J2EE)
????? 5.Web層的MVC框架(MVC in the?Web Tier)
????? 6.對遠程訪問的支持(Remoting Support)
????? 7.郵件支持(Mail Support)
????? 8.任務安排的支持(Job Scheduling Support)
????? 9.簡化的異常處理(Simplified Exception Handling)
????? 10.源代碼級的元數據(Source Level Metadata)