詳細介紹Spring的核心
Spring的核心是個輕量級容器(container),實現了IoC(Inversion of Control)模式的容器,Spring的目標是實現一個全方位的整合框架,在Spring框架下實現多個子框架的組合,這些子框架之間彼此可以獨立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案 。
Spring不會特別去提出一些子框架來與現有的OpenSource框架競爭,除非它覺得所提出的框架夠新夠好,例如Spring有自己的 MVC框架方案,因為它覺得現有的MVC方案有很多可以改進的地方,但它不強迫您使用它提供的方案,您可以選用您所希望的框架來取代其子框架,例如您仍可以在Spring中整合您的Struts框架 。
Spring的核心概念是IoC,IoC的抽象概念是「依賴關系的轉移」,像是「高層模組不應該依賴低層模組,而是模組都必須依賴于抽象」是 IoC的一種表現,「實現必須依賴抽象,而不是抽象依賴實現」也是IoC的一種表現,「應用程序不應依賴于容器,而是容器服務于應用程序」也是IoC的一種表現。
Spring簡介
關于Spring Framework,今年夏天你可能已經聽見很多的議論。在本文中,我將試圖解釋Spring能完成什么,和我怎么會認為它能幫助你開發J2EE應用程序。
另一framework,你可能正在想“不過是另外一個的framework”。當已經有許多開放源代碼(和專有) J2EE framework時,為什么你應該費心讀這篇文章,或下載Spring Framework?
我相信Spring是獨特的,因為若干個原因: 它定位的領域是許多其他流行的framework沒有的。Spring關注提供一種方法管理你的業務對象。
Spring是全面的和模塊化的。Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務對象。 它的設計從底部幫助你編寫易于測試的代碼。Spring是用于測試驅動工程的理想的framework。Spring對你的工程來說,它不需要一個以上的framework。
Spring是潛在地一站式解決方案,定位于與典型應用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。盡管它僅僅是一個從2003年2月才開始的開源工程,但Spring有較長的歷史根基。這個開源工程是起源自我在2002年后期出版的《Expert One-on-One J2EE設計與開發》書中的基礎代碼。這本書展示了Spring背后的基礎架構。然而,這個基礎架構的概念要追溯到2000年的早些時候,并且反映了我為一系列成功的商業工程開發基礎結構的經驗。從2003年1月,Spring已經落戶于SourceForge上。現在有10個開發人員,其中6是高度投入的積極分子。
Spring的架構性的好處
◆Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發現Spring關注了遺留下的問題。
◆Spring能消除在許多工程上對Singleton的過多使用。根據我的經驗,這是一個主要的問題,它減少了系統的可測試性和面向對象特性。
◆Spring 能消除使用各種各樣格式的屬性定制文件的需要,在整個應用和工程中,可通過一種一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。 Spring能通過接口而不是類促進好的編程習慣,減少編程代價到幾乎為零。
◆Spring被設計為讓使用它創建的應用盡可能少的依賴于他的APIs。在Spring應用中的大多數業務對象沒有依賴于Spring。
◆使用Spring構建的應用程序易于單元測試。
◆Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。
◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應用。例如,Spring能使用AOP提供聲明性事務而不通過使用EJB容器,如果你僅僅需要與單個的數據庫打交道,甚至不需要JTA實現。
◆Spring為數據存取提供了一致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。
◆Spring確實使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
Spring能做什么
Spring提供許多功能,在此我將快速地依次展示其各個主要方面。首先,讓我們明確Spring范圍。盡管Spring覆蓋了許多方面,但我們已經有清楚的概念,它什么應該涉及和什么不應該涉及。
Spring的主要目的是使J2EE易用和促進好編程習慣。
Spring不重新開發已有的東西。因此,在Spring中你將發現沒有日志記錄的包,沒有連接池,沒有分布事務調度。這些均有開源項目提供(例如 Commons Logging 用來做所有的日志輸出,或Commons DBCP用來作數據連接池),或由你的應用程序服務器提供。因為同樣的的原因,我們沒有提供O/R mapping層,對此,已有有好的解決辦法如Hibernate和JDO。
Spring的目標是使已存在的技術更加易用。例如,盡管我們沒有底層事務協調處理,但我們提供了一個抽象層覆蓋了JTA或任何其他的事務策略。
Spring 沒有直接和其他的開源項目競爭,除非我們感到我們能提供新的一些東西。例如,象許多開發人員,我們從來沒有為Struts高興過,并且感到在MVC web framework中還有改進的余地。在某些領域,例如輕量級的 IoC容器和AOP框架,Spring有直接的競爭,但是在這些領域還沒有已經較為流行的解決方案。(Spring在這些區域是開路先鋒。)
Spring也得益于內在的一致性。
所有的開發者都在唱同樣的的贊歌,基礎想法依然是Expert One-on-One J2EE設計與開發的那些。
并且我們已經能夠使用一些主要的概念,例如倒置控制,來處理多個領域。
Spring在應用服務器之間是可移植的。
當然保證可移植性總是一次挑戰,但是我們避免任何特定平臺或非標準化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的應用服務器上的用戶。
Spring的核心即是個IoC/DI的容器,它可以幫程序設計人員完成組件之間的依賴關系注入,使得組件之間的依賴達到最小,進而提高組件的重用性,Spring是個低侵入性(invasive)的框架,Spring中的組件并不會意識到它正置身于Spring中,這使得組件可以輕易的從框架中脫離,而幾乎不用任何的修改,反過來說,組件也可以簡單的方式加入至框架中,使得組件甚至框架的整合變得容易。
Spring最為人重視的另一方面是支持 AOP(Aspect-Oriented Programming),然而AOP框架只是Spring支持的一個子框架,說Spring框架是AOP框架并不是一件適當的描述,人們對于新奇的 AOP關注映射至Spring上,使得人們對于Spring的關注集中在它的AOP框架上,雖然有所誤解,但也突顯了Spring的另一個令人關注的特色。
Spring也提供MVC Web框架的解決方案,但您也可以將自己所熟悉的MVC Web框架與Spring解合,像是Struts、Webwork等等,都可以與Spring整合而成為進用于自己的解決方案。Spring也提供其它方面的整合,像是持久層的整合如JDBC、O/R Mapping工具(Hibernate、iBATIS)、事務處理等等,Spring作了對多方面整合的努力,故說Spring是個全方位的應用程序框架。
想要入門Spring,對于IoC/DI的了解是必要的。如果您想了解Spring的整體概念,可以看看Expert One on one J2EE Development Without EJB這本書,Spring的前身是由該作者的前一本書Expert One on one J2EE Design and Development中的一個實際程序開始,Spring本身是J2EE的一個輕量級容器解決方案,從這本書了解J2EE程序設計的考慮也是個不錯的基礎建構方式。對于Expert One on one J2EE Development Without EJB這本書,如果您想了解Spring,可以看chapter 7、chapter 13。
【編輯推薦】




















