《Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計(jì)原理(第2版)》是國(guó)內(nèi)唯一一本系統(tǒng)分析Spring源代碼的著作,也是Spring領(lǐng)域的問鼎之作,由業(yè)界擁有10余年開發(fā)經(jīng)驗(yàn)的資深Java專家親自執(zhí)筆,Java開發(fā)者社區(qū)和Spring開發(fā)者社區(qū)聯(lián)袂推薦。本書第1版不僅在內(nèi)容上獲得了讀者的廣泛好評(píng),而且在銷量上也摘取了同類書的桂冠,曾經(jīng)一度掀起Java類圖書的銷售熱潮。第2版不僅繼承了第1版在內(nèi)容組織和寫作方式上的優(yōu)點(diǎn),而且還根據(jù)廣大讀者的反饋改進(jìn)了若干細(xì)節(jié)上的不足。更為重要的是,結(jié)合Spring的最新版本對(duì)過時(shí)的內(nèi)容進(jìn)行了更新,并增加了大量新內(nèi)容,使本書更趨近于完美。
《Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計(jì)原理(第2版)》從源代碼的角度對(duì)Spring的內(nèi)核和各個(gè)主要功能模塊的架構(gòu)、設(shè)計(jì)和實(shí)現(xiàn)原理進(jìn)行了深入剖析。你不僅能從本書中參透Spring框架的優(yōu)秀架構(gòu)和設(shè)計(jì)思想,還能從Spring優(yōu)雅的實(shí)現(xiàn)源碼中一窺Java語(yǔ)言的精髓。本書在開篇之前對(duì)Spring的設(shè)計(jì)理念和整體架構(gòu)進(jìn)行了全面的介紹,能讓讀者從宏觀上厘清Spring各個(gè)功能模塊之間的關(guān)系;第一部分詳細(xì)分析了Spring的核心:IoC容器和AOP的實(shí)現(xiàn),能幫助讀者了解Spring的運(yùn)行機(jī)制;第二部分深入闡述了各種基于IoC容器和AOP的Java EE組件在Spring中的實(shí)現(xiàn)原理;第三部分講述了ACEGI安全框架、DM模塊以及Flex模塊等基于Spring的典型應(yīng)用的設(shè)計(jì)與實(shí)現(xiàn)。
無論你是Java程序員、Spring開發(fā)者,還是平臺(tái)開發(fā)人員、系統(tǒng)架構(gòu)師,抑或是對(duì)開源軟件源代碼著迷的代碼狂人,都能從本書中受益。
暢銷書全新升級(jí),第1版廣獲好評(píng),摘取Spring類圖書銷量桂冠,掀起Java類圖書銷售熱潮 系統(tǒng)解讀Spring最新版本源代碼,從宏觀和微觀兩個(gè)角度深入剖析Spring架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理 資深Java專家親自執(zhí)筆,Java開發(fā)者社區(qū)和Spring開發(fā)者社區(qū)聯(lián)袂推薦
為什么要寫這本書
本書探討了Spring框架的設(shè)計(jì)原理、架構(gòu)和運(yùn)行機(jī)制。作為在Java領(lǐng)域最為成功的開源軟件之一,Spring在Java EE開發(fā)中,使用者眾多。本書以Spring的源代碼為依托,結(jié)合Spring的設(shè)計(jì)思路,從內(nèi)部實(shí)現(xiàn)的角度,對(duì)Spring的實(shí)現(xiàn)進(jìn)行了翔實(shí)的分析,希望能夠通過這種分析,使讀者在開發(fā)者的層面掌握Spring,為開發(fā)Spring應(yīng)用提供更扎實(shí)的框架基礎(chǔ)。
“忽如一夜春風(fēng)來”,伴隨著2002年Rod Johnson的《Expert One-on-One J2EE Design and Development》一書的出版而正式發(fā)布的Spring框架(也就是當(dāng)年的interface21),經(jīng)過這幾年的發(fā)展,已經(jīng)逐漸成熟起來。“吹面不寒楊柳風(fēng)”,Spring帶來的嶄新開發(fā)理念,也早已伴隨著它的廣泛應(yīng)用而“飛入尋常百姓家”。
與此同時(shí),隨著Spring的不斷成熟和完善,開源社區(qū)的成長(zhǎng),以及Spring開發(fā)團(tuán)隊(duì)的不懈努力,以Spring為核心的一系列開源軟件產(chǎn)品也越來越豐富,現(xiàn)已發(fā)展成為一個(gè)包括軟件構(gòu)建、開發(fā)、運(yùn)行、部署整個(gè)軟件生命周期的產(chǎn)品族群。Spring不但改變了Java EE應(yīng)用的開發(fā)和服務(wù)模式,向純商業(yè)軟件發(fā)出了有力的挑戰(zhàn),同時(shí)也成為Java軟件生態(tài)鏈中不可或缺的重要組成部分。它所具備的那種平易近人、內(nèi)涵豐富的品質(zhì),對(duì)我們這些軟件愛好者來說,實(shí)在是一個(gè)不可多得的學(xué)習(xí)范本。
簡(jiǎn)化Java企業(yè)應(yīng)用的開發(fā)是Spring框架的目標(biāo)。其輕量級(jí)的開發(fā)思想,為開發(fā)者提供便利的出發(fā)點(diǎn)(for the developer, to the developer and by the developer —這是Rod Johnson在一次演講中的開場(chǎng)白),以及具有活力的開源社區(qū),所有的這些,都為使用Java開發(fā)企業(yè)應(yīng)用和Web應(yīng)用帶來了福音,這些都是Spring吸引我們的地方。
在Java企業(yè)應(yīng)用中,與我們熟悉的企業(yè)應(yīng)用服務(wù)器一樣,Spring也希望能夠集成管理企業(yè)應(yīng)用資源,以及為應(yīng)用開發(fā)提供平臺(tái)支持。在這一點(diǎn)上,Spring與UNIX和Windows等傳統(tǒng)意義上的操作系統(tǒng),在計(jì)算系統(tǒng)中起到的作用是類似的。不同點(diǎn)在于,傳統(tǒng)操作系統(tǒng)關(guān)心的是存儲(chǔ)、計(jì)算、通信、外圍設(shè)備等這些物理資源的管理,并在管理這些資源的基礎(chǔ)上,為應(yīng)用程序提供統(tǒng)一的平臺(tái)和服務(wù)接口;而Spring關(guān)心的是,如何為開發(fā)者集中管理在Java企業(yè)應(yīng)用和Web應(yīng)用中涉及的數(shù)據(jù)持久化、事務(wù)處理、消息中間件、分布式計(jì)算等抽象資源,并在此基礎(chǔ)上,為應(yīng)用提供了一個(gè)基于POJO的開發(fā)環(huán)境。盡管二者面向的資源、管理的對(duì)象、支持的應(yīng)用,以及使用的場(chǎng)景不同,但它們?cè)谡麄(gè)計(jì)算系統(tǒng)中的定位,卻有著可以類比和相互參考之處。所以,筆者根據(jù)對(duì)傳統(tǒng)操作系統(tǒng)的認(rèn)識(shí)方法,粗淺地把Spring框架劃分為核心、組件和應(yīng)用三個(gè)基本的層次,通過這三個(gè)層次中一些主要特性來剖析Spring的工作原理和運(yùn)作機(jī)制。同時(shí),也用這樣的認(rèn)識(shí)邏輯來組織本書中要闡述的內(nèi)容。
在這樣的層次劃分中,首先看到的是對(duì)IoC容器和AOP這兩個(gè)核心模塊的工作原理的分析,它們都是Spring平臺(tái)實(shí)現(xiàn)的核心部分;同時(shí),它們也是Spring的其他模塊實(shí)現(xiàn)的基礎(chǔ)。雖然,對(duì)大多數(shù)開發(fā)者而言,都只是在此基礎(chǔ)上進(jìn)行相關(guān)的配置和外部功能的使用,但是,深入理解這兩個(gè)核心模塊的工作原理和運(yùn)作機(jī)制,對(duì)于我們更好地應(yīng)用Spring進(jìn)行開發(fā)是至關(guān)重要的。因?yàn)椋瑥腟pring要簡(jiǎn)化Java EE開發(fā)的出發(fā)點(diǎn)來看,它是通過對(duì)POJO開發(fā)提供支持來實(shí)現(xiàn)的。具體地說,Spring通過為應(yīng)用基于POJO的開發(fā)模式提供支持,從而使應(yīng)用開發(fā)和復(fù)雜的Java EE服務(wù)實(shí)現(xiàn)解耦,并由此通過提高單元測(cè)試覆蓋率(也就是應(yīng)用系統(tǒng)的可測(cè)試性)來有效地提高整個(gè)Spring應(yīng)用的開發(fā)質(zhì)量。在這樣的開發(fā)場(chǎng)景下,需要把為POJO提供支持的各種Java EE服務(wù)支持抽象到Spring應(yīng)用平臺(tái)中去,并將其封裝起來。具體來說,這一系列的封裝工作,在Spring及其應(yīng)用實(shí)現(xiàn)中,離不開IoC容器和AOP這兩個(gè)核心模塊的支持,它們?cè)诤艽蟪潭壬象w現(xiàn)了Spring作為應(yīng)用開發(fā)平臺(tái)的核心價(jià)值。它們的實(shí)現(xiàn)是Rod Johnson在他的另外一本著作《Expert One-on-One J2EE Development without EJB》中所提到“Without EJB設(shè)計(jì)思想”的具體體現(xiàn),同時(shí),也深刻地體現(xiàn)了Spring背后的設(shè)計(jì)理念。
其次,在IoC容器和AOP這兩個(gè)核心模塊的支持下,Spring為了簡(jiǎn)化Java EE的開發(fā),為應(yīng)用開發(fā)提供了許多現(xiàn)成的用戶態(tài)的系統(tǒng)組件,比如事務(wù)處理、Web MVC、JDBC、O/R映射、遠(yuǎn)端調(diào)用等,通過這些系統(tǒng)組件,為企業(yè)應(yīng)用服務(wù)的實(shí)現(xiàn)提供驅(qū)動(dòng)支持。這些由Spring或其生態(tài)系統(tǒng)(其本身、子項(xiàng)目或者社區(qū))提供的,類似于驅(qū)動(dòng)模塊般的系統(tǒng)組件是開發(fā)應(yīng)用時(shí)經(jīng)常會(huì)用到的Java EE服務(wù)抽象。通過使用Spring提供的這些類似于驅(qū)動(dòng)組件的中間產(chǎn)品,通過這一層Java EE服務(wù)的抽象,從而讓用戶可以通過使用簡(jiǎn)單的開發(fā)接口或應(yīng)用模板,不但能夠很方便地使用各種Java EE服務(wù),還可以靈活地選取提供這些服務(wù)的各種不同的具體實(shí)現(xiàn)方案。讓應(yīng)用可以在各種第三方開源軟件或者商業(yè)產(chǎn)品中自由選擇,充分體現(xiàn)了Spring作為應(yīng)用平臺(tái)的開放性。
Spring作為一個(gè)開源項(xiàng)目,它本身就是一個(gè)開放的生態(tài)系統(tǒng)。對(duì)于和Spring相關(guān)的一些項(xiàng)目,可以把它們看做在某個(gè)領(lǐng)域的用戶應(yīng)用,因?yàn)樗鼈兪呛蚐pring實(shí)現(xiàn)緊密相關(guān)的,或者它們本身就作為Spring框架的應(yīng)用案例,體現(xiàn)了許多使用Spring的技巧。這些內(nèi)容都是我們開發(fā)應(yīng)用時(shí)的理想?yún)⒖迹⑶視?huì)隨著技術(shù)的發(fā)展而不斷豐富,比如Spring DM、Spring FLEX、ACEGI安全性框架,以及Pet Clinic應(yīng)用實(shí)例等。一方面,可以把這些實(shí)現(xiàn)作為應(yīng)用的一個(gè)基本方案加以裁剪,以滿足特定領(lǐng)域的需求;另一方面,通過剖析這些應(yīng)用,可以為應(yīng)用開發(fā)提供很好的參考和借鑒,提高應(yīng)用開發(fā)的效率。
從更深層次的技術(shù)層面上來看,因?yàn)镾pring是一個(gè)基于Java語(yǔ)言的應(yīng)用平臺(tái),如果我們能夠?qū)pring的運(yùn)行環(huán)境Java計(jì)算模型(比如JVM的實(shí)現(xiàn)原理)有一些了解,將會(huì)加深我們對(duì)Spring實(shí)現(xiàn)原理的理解。反射機(jī)制、代理類、字節(jié)碼技術(shù)等這些JVM特性,都是在Spring實(shí)現(xiàn)中會(huì)涉及的一些Java計(jì)算環(huán)境的底層技術(shù)。一般的應(yīng)用開發(fā)人員可能不會(huì)直接從事與JVM底層實(shí)現(xiàn)相關(guān)的工作,但是,這些計(jì)算環(huán)境的底層知識(shí)對(duì)深入理解Spring是不可缺少的。
說了這么多,很多讀者可能已經(jīng)有些迫不及待了,只有對(duì)Spring的設(shè)計(jì)和實(shí)現(xiàn)身臨其境地接觸才是真實(shí)的,這里太多的文字已經(jīng)成為一種累贅。本書將帶領(lǐng)你到Spring核心設(shè)計(jì)這個(gè)茂密而又充滿生機(jī)的源代碼叢林中去一探究竟。在這里,你會(huì)驚奇地發(fā)現(xiàn):這個(gè)過程就像是閱讀優(yōu)美的散文一樣,是與開源軟件開發(fā)者及開發(fā)者社區(qū)之間的一種暢快淋漓的交流,讓人如癡如醉。
第1版與第2版的區(qū)別
本書是第2版,在寫作過程中吸收了讀者對(duì)上一版內(nèi)容的許多意見和建議,比如著重增加了對(duì)Spring宏觀框架和設(shè)計(jì)方面的闡述,加強(qiáng)了對(duì)Spring各種特性應(yīng)用場(chǎng)景方面的描述,并結(jié)合了深入具體的源代碼實(shí)現(xiàn)。希望通過這些改進(jìn),給讀者一個(gè)從應(yīng)用到設(shè)計(jì)再到實(shí)現(xiàn)的完整理解,彌補(bǔ)第1版中深度有余,內(nèi)容層次不夠豐富,分析手法單一等諸多不足。
較第1版而言,第2版的改動(dòng)主要體現(xiàn)在以下幾個(gè)方面,希望讀者能夠在閱讀中體會(huì)。
在內(nèi)容闡述方式上,對(duì)每一章的內(nèi)容進(jìn)行了調(diào)整和重新編排,基本按照“使用場(chǎng)景”、“設(shè)計(jì)和實(shí)現(xiàn)過程”、“源碼實(shí)現(xiàn)”這樣的邏輯來重新組織大部分內(nèi)容。希望通過這樣的組織方式,能夠使讀者以由表及里,由配置應(yīng)用到設(shè)計(jì)實(shí)現(xiàn),從抽象到具體的方式來了解Spring的各個(gè)模塊,從而豐富對(duì)Spring各個(gè)層次的認(rèn)識(shí)。
在基于實(shí)現(xiàn)源碼分析的基礎(chǔ)上,增加了許多對(duì)Spring設(shè)計(jì)的分析,這些設(shè)計(jì)分析主要包括:在各個(gè)Spring模塊中,核心類的繼承關(guān)系、主要接口設(shè)計(jì)、主要功能特性實(shí)現(xiàn)的對(duì)象交互關(guān)系等。在描述這部分內(nèi)容時(shí),大多以UML類圖和時(shí)序圖的方式給出,從而幫助讀者對(duì)Spring的設(shè)計(jì)有一個(gè)直觀的了解,而不至于一下子就深入到Spring源代碼實(shí)現(xiàn)中去,導(dǎo)致只見樹木不見森林,另一方面也可以改善對(duì)Spring源代碼解讀的學(xué)習(xí)曲線。同時(shí),在設(shè)計(jì)分析的過程中,盡可能地對(duì)在Spring設(shè)計(jì)中使用到的一些典型設(shè)計(jì)模式進(jìn)行提示,通過這種方式使讀者可以體會(huì)到各種設(shè)計(jì)模式在Spring設(shè)計(jì)中的靈活運(yùn)用;結(jié)合Spring的設(shè)計(jì)和實(shí)現(xiàn)為設(shè)計(jì)模式的運(yùn)用提供一系列絕佳的實(shí)際案例,從而提高讀者對(duì)軟件設(shè)計(jì)的理解和設(shè)計(jì)模式的實(shí)際運(yùn)用能力。
在具體內(nèi)容的呈現(xiàn)上,對(duì)上一版的內(nèi)容進(jìn)行了一些調(diào)整,這些調(diào)整包括:增加了第1章,對(duì)Spring項(xiàng)目的概要情況進(jìn)行了簡(jiǎn)要闡述;同時(shí)把第1版中的一些內(nèi)容,比如源代碼環(huán)境的準(zhǔn)備、Spring 發(fā)布包的構(gòu)建、Spring IDE的基本使用,以及Pet Clinic應(yīng)用實(shí)例的分析等內(nèi)容,放到了附錄部分進(jìn)行闡述。除此之外,在這一版中,根據(jù)Spring項(xiàng)目的自身發(fā)展情況增加了一些新的內(nèi)容,比如對(duì)Spring DM和Spring FLEX這兩個(gè)模塊的分析。通過對(duì)這些Spring模塊的分析,一方面可以了解Spring的發(fā)展歷程,豐富視野;另一方面,也可以看到Spring與時(shí)俱進(jìn)的旺盛生命力。
讀者對(duì)象
學(xué)習(xí)Java語(yǔ)言和Java EE技術(shù)的中高級(jí)讀者
Spring是利用Java語(yǔ)言實(shí)現(xiàn)的,其很多特性的設(shè)計(jì)和實(shí)現(xiàn)都極其優(yōu)秀,非常具有研究和參考價(jià)值。對(duì)這部分讀者來說,不僅可以從本書中了解Spring的實(shí)現(xiàn)原理,還能通過Spring的設(shè)計(jì)原理和源代碼實(shí)現(xiàn),掌握大量的Java設(shè)計(jì)方法、設(shè)計(jì)模式、編碼技巧和Java EE開發(fā)技術(shù)。
Spring應(yīng)用開發(fā)人員
如果要利用Spring進(jìn)行高級(jí)應(yīng)用開發(fā),抑或是相關(guān)的優(yōu)化和擴(kuò)展工作,僅僅掌握Spring的配置和基本使用是遠(yuǎn)遠(yuǎn)不夠的,必須要對(duì)Spring框架的設(shè)計(jì)原理、架構(gòu)和運(yùn)作機(jī)制有一定的了解。對(duì)這部分讀者而言,本書將帶領(lǐng)他們?nèi)媪私釹pring的設(shè)計(jì)和實(shí)現(xiàn),從而加深對(duì)Spring框架的理解,提高開發(fā)水平。同時(shí),本書可以作為他們定制和擴(kuò)展Spring框架的參考資料。
開源軟件愛好者
Spring是開源軟件中的佼佼者,它在實(shí)現(xiàn)的過程中吸收了很多開源領(lǐng)域的優(yōu)秀思想,同時(shí)也有很多值得學(xué)習(xí)的創(chuàng)新。尤為值得一提的是,本書分析Spring設(shè)計(jì)和實(shí)現(xiàn)的方式也許值得所有開源軟件愛好者進(jìn)行學(xué)習(xí)和借鑒。通過閱讀本書,這部分讀者不僅能領(lǐng)略到開源軟件的優(yōu)秀思想,還可以掌握分析開源軟件源代碼的方法和技巧,從而進(jìn)一步提高使用開源軟件的效率和質(zhì)量。
平臺(tái)開發(fā)人員和架構(gòu)師
Spring的設(shè)計(jì)思想和體系結(jié)構(gòu)、詳細(xì)設(shè)計(jì)和源碼實(shí)現(xiàn)都是非常優(yōu)秀的,是平臺(tái)開發(fā)人員和架構(gòu)師們不可多得的參考資料。
如何閱讀本書
本書主要內(nèi)容分為三個(gè)部分,分別闡述了Spring的核心、組件和應(yīng)用三個(gè)方面。在展開這三個(gè)部分的內(nèi)容之前,第1章對(duì)Spring的項(xiàng)目情況和整體架構(gòu)進(jìn)行了簡(jiǎn)要的介紹,這一章就像一個(gè)熱身活動(dòng),為本書的主要內(nèi)容做鋪墊,如果您已經(jīng)很熟悉Spring的使用,這一章可以自行跳過,直接進(jìn)入到下面三個(gè)主體部分的內(nèi)容。
第一部分詳細(xì)分析了IoC容器和AOP的實(shí)現(xiàn),這部分內(nèi)容是理解Spring平臺(tái)的基礎(chǔ),適合對(duì)Spring的運(yùn)行機(jī)理有深入了解需求的讀者閱讀。在對(duì)AOP實(shí)現(xiàn)模塊的分析中涉及的一些JVM底層技術(shù),也是讀者需要具備的背景知識(shí)。
第二部分深入闡述了基于Spring IoC容器和AOP的Java EE組件在Spring中的實(shí)現(xiàn)。在這部分內(nèi)容中可以看到,每一個(gè)組件實(shí)現(xiàn)的內(nèi)容基本上都是相對(duì)獨(dú)立的,讀者可以結(jié)合自己的需求選讀。如果對(duì)Spring Web MVC的實(shí)現(xiàn)感興趣,可以閱讀第4章;如果對(duì)Spring提供的數(shù)據(jù)庫(kù)操作的實(shí)現(xiàn)機(jī)制感興趣,可以閱讀第5章;如果對(duì)Spring中提供的統(tǒng)一事務(wù)處理的實(shí)現(xiàn)感興趣,可以閱讀第6章;如果對(duì)Spring提供的各種不同的遠(yuǎn)端調(diào)用實(shí)現(xiàn)感興趣,可以閱讀第7章。
第三部分講述了一些基于Spring的典型應(yīng)用的實(shí)現(xiàn)。如果讀者對(duì)在Spring應(yīng)用中如何滿足應(yīng)用資源的安全性需求方面的內(nèi)容感興趣,可以閱讀第8章,本章對(duì)為Spring應(yīng)用提供安全服務(wù)的ACEGI框架的實(shí)現(xiàn)進(jìn)行了分析,在深入了解這部分內(nèi)容的基礎(chǔ)上,讀者可以根據(jù)自己的應(yīng)用需求定制自己的安全系統(tǒng)。第9章分析了Spring DM的設(shè)計(jì)和實(shí)現(xiàn),通過Spring DM,可以將Spring應(yīng)用便利地架構(gòu)到OSGi的框架上去。第10章分析了Spring Flex的設(shè)計(jì)和實(shí)現(xiàn),為使用Adobe Flex作為應(yīng)用前端架構(gòu)的Spring應(yīng)用提供參考。
閱讀本書時(shí),建議讀者在自己的計(jì)算機(jī)中建立一個(gè)源代碼閱讀環(huán)境,這樣一方面可以追蹤最新的源代碼實(shí)現(xiàn),另一方面,可以在閱讀的過程中進(jìn)行各種方式的索引和動(dòng)手驗(yàn)證,加深對(duì)開源軟件開發(fā)方式的體會(huì)。關(guān)于如何建立Spring的源代碼環(huán)境,進(jìn)行Spring項(xiàng)目的構(gòu)建,通過IDE閱讀源代碼的基本方法等,感興趣的讀者可以參考本書附錄中的內(nèi)容。
在附錄A、B、C中,對(duì)如何建立Spring項(xiàng)目環(huán)境進(jìn)行了簡(jiǎn)要介紹,這部分內(nèi)容包括如何獲取Spring項(xiàng)目的源代碼,如何構(gòu)建Spring的發(fā)布包,如何使用Spring IDE工具等。這些知識(shí)不但適用于建立Spring的源代碼研究環(huán)境,還適用于其他的Java開源項(xiàng)目,有一定的普遍性和參考價(jià)值。對(duì)于不同的Java開源項(xiàng)目,其使用的源代碼管理工具、代碼倉(cāng)庫(kù)的位置、權(quán)限配置會(huì)有所不同,但是,整個(gè)源代碼的獲取過程與獲取Spring源代碼的過程是類似的,整個(gè)構(gòu)建過程也與Spring的構(gòu)建方式大體相似,是非常值得我們參考的。
在附錄D中,對(duì)伴隨Spring項(xiàng)目的應(yīng)用實(shí)例Pet Clinic進(jìn)行了分析,這個(gè)應(yīng)用實(shí)例為Spring應(yīng)用開發(fā)提供了一個(gè)現(xiàn)實(shí)的使用案例,雖然簡(jiǎn)單,卻相對(duì)完整。這個(gè)應(yīng)用實(shí)例本身也是Spring團(tuán)隊(duì)的作品,是Spring項(xiàng)目發(fā)布的一部分,其中為我們更好地使用Spring提供參考。
勘誤和支持
由于作者對(duì)Spring的認(rèn)知水平有限,再加上寫作時(shí)的疏漏,書中還存在許多需要改進(jìn)的地方。在此,歡迎讀者朋友們指出書中存在的問題,并提出指導(dǎo)性意見,不甚感謝。如果大家有任何與本書相關(guān)的內(nèi)容需要與我探討,也可以加入本書微群q.weibo.com/943166,我會(huì)及時(shí)給予回復(fù)。最后,衷心地希望本書能給大家?guī)韼椭⒆4蠹议喿x愉快!
致謝
感謝互聯(lián)網(wǎng),感謝開源軟件,感謝Java,感謝Spring,感謝我們的社區(qū),讓我體驗(yàn)到如此美妙的開放氛圍,體會(huì)到開源軟件如此獨(dú)特的魅力!好了,不多說了,筆者真誠(chéng)地希望通過本書為你打開一個(gè)小小的入口,曲徑通幽,通過這個(gè)入口,讓我們一起在由開源軟件和互聯(lián)網(wǎng)構(gòu)成的美麗風(fēng)景中快樂地旅行!
計(jì)文柯(Wenke J)
計(jì)文柯,資深軟件開發(fā)專家和項(xiàng)目經(jīng)理,擁有10余年業(yè)界經(jīng)驗(yàn),對(duì)Spring等開源軟件的應(yīng)用和實(shí)現(xiàn)原理有深入研究和獨(dú)到見解。產(chǎn)品研發(fā)和項(xiàng)目管理經(jīng)驗(yàn)豐富,曾就職于華為、摩托羅拉等知名企業(yè)和硅谷移動(dòng)互聯(lián)網(wǎng)創(chuàng)業(yè)公司,在軟件工程和項(xiàng)目管理方面積累了大量最佳實(shí)踐。現(xiàn)與同伴一起創(chuàng)立并運(yùn)營(yíng)深圳云果科技,專注于云計(jì)算解決方案的研究與實(shí)施。
前言
第1章 Spring的設(shè)計(jì)理念和整體架構(gòu)
1.1 Spring的各個(gè)子項(xiàng)目
1.2 Spring的設(shè)計(jì)目標(biāo)
1.3 Spring的整體架構(gòu)
1.4 Spring的應(yīng)用場(chǎng)景
1.5 小結(jié)
第一部分 Spring核心實(shí)現(xiàn)篇
第2章 Spring Framework的核心:IoC容器的實(shí)現(xiàn)
2.1 Spring IoC容器概述
2.1.1 IoC容器和依賴反轉(zhuǎn)模式
2.1.2 Spring IoC的應(yīng)用場(chǎng)景
2.2 IoC容器系列的設(shè)計(jì)與實(shí)現(xiàn):BeanFactory和ApplicationContext
2.2.1 Spring的IoC容器系列
2.2.2 Spring IoC容器的設(shè)計(jì)
2.3 IC容器的初始化過程
2.3.1 BeanDefinition的Resource定位
2.3.2 BeanDefinition的載入和解析
2.3.3 BeanDefinition在IoC容器中的注冊(cè)
2.4 IoC容器的依賴注入
2.5 容器其他相關(guān)特性的設(shè)計(jì)與實(shí)現(xiàn)
2.5.1 ApplicationContext和Bean的初始化及銷毀
2.5.2 lazy-init屬性和預(yù)實(shí)例化
2.5.3 FactoryBean的實(shí)現(xiàn)
2.5.4 BeanPostProcessor的實(shí)現(xiàn)
2.5.5 autowiring(自動(dòng)依賴裝配)的實(shí)現(xiàn)
2.5.6 Bean的依賴檢查
2.5.7 Bean對(duì)IoC容器的感知
2.6 小結(jié)
第3章 Spring AOP的實(shí)現(xiàn)
3.1 Spring AOP概述
3.1.1 AOP概念回顧
3.1.2 Advice通知
3.1.3 Pointcut切點(diǎn)
3.1.4 Advisor通知器
3.2 Spring AOP的設(shè)計(jì)與實(shí)現(xiàn)
3.2.1 JVM的動(dòng)態(tài)代理特性
3.2.2 Spring AOP的設(shè)計(jì)分析
3.2.3 Spring AOP的應(yīng)用場(chǎng)景
3.3 建立AopProxy代理對(duì)象
3.3.1 設(shè)計(jì)原理
3.3.2 配置ProxyFactoryBean
3.3.3 ProxyFactoryBean生成AopProxy代理對(duì)象
3.3.4 JDK生成AopProxy代理對(duì)象
3.3.5 CGLIB生成AopProxy代理對(duì)象
3.4 Spring AOP攔截器調(diào)用的實(shí)現(xiàn)
3.4.1 設(shè)計(jì)原理
3.4.2 JdkDynamicAopProxy的invoke攔截
3.4.3 Cglib2AopProxy的intercept攔截
3.4.4 目標(biāo)對(duì)象方法的調(diào)用
3.4.5 AOP攔截器鏈的調(diào)用
3.4.6 配置通知器
3.4.7 Advice通知的實(shí)現(xiàn)
3.4.8 ProxyFactory實(shí)現(xiàn)AOP
3.5 Spring AOP的高級(jí)特性
3.6 小結(jié)
第二部分 Spring組件實(shí)現(xiàn)篇
第4章 Spring MVC與Web環(huán)境
4.1 Spring MVC概述
4.2 Web環(huán)境中的Spring MVC
4.3 上下文在Web容器中的啟動(dòng)
4.3.1 IoC容器啟動(dòng)的基本過程
4.3.2 Web容器中的上下文設(shè)計(jì)
4.3.3 ContextLoader的設(shè)計(jì)與實(shí)現(xiàn)
4.4 Spring MVC的設(shè)計(jì)與實(shí)現(xiàn)
4.4.1 Spring MVC的應(yīng)用場(chǎng)景
4.4.2 Spring MVC設(shè)計(jì)概覽
4.4.3 DispatcherServlet的啟動(dòng)和初始化
4.4.4 MVC處理HTTP分發(fā)請(qǐng)求
4.5 Spring MVC視圖的呈現(xiàn)
4.5.1 DispatcherServlet視圖呈現(xiàn)的設(shè)計(jì)
4.5.2 JSP視圖的實(shí)現(xiàn)
4.5.3 ExcelView的實(shí)現(xiàn)
4.5.4 PDF視圖的實(shí)現(xiàn)
4.6 小結(jié)
第5章 數(shù)據(jù)庫(kù)操作組件的實(shí)現(xiàn)
5.1 Spring JDBC的設(shè)計(jì)與實(shí)現(xiàn)
5.1.1 應(yīng)用場(chǎng)景
5.1.2 設(shè)計(jì)概要
5.2 Spring JDBC中模板類的設(shè)計(jì)與實(shí)現(xiàn)
5.2.1 設(shè)計(jì)原理
5.2.2 JdbcTemplate的基本使用
5.2.3 JdbcTemplate的execute實(shí)現(xiàn)
5.2.4 JdbcTemplate的query實(shí)現(xiàn)
5.2.5 使用數(shù)據(jù)庫(kù)Connection
5.3 Spring JDBC中RDBMS操作對(duì)象的實(shí)現(xiàn)
5.3.1 SqlQuery的實(shí)現(xiàn)
5.3.2 SqlUpdate的實(shí)現(xiàn)
5.3.3 SqlFunction
5.4 Spring ORM的設(shè)計(jì)與實(shí)現(xiàn)
5.4.1 應(yīng)用場(chǎng)景
5.4.2 設(shè)計(jì)概要
5.5 Spring驅(qū)動(dòng)Hibernate的設(shè)計(jì)與實(shí)現(xiàn)
5.5.1 設(shè)計(jì)原理
5.5.2 Hibernate的SessionFactory
5.5.3 HibernateTemplate的實(shí)現(xiàn)
5.5.4 Session的管理
5.6 Spring驅(qū)動(dòng)iBatis的設(shè)計(jì)與實(shí)現(xiàn)
5.6.1 設(shè)計(jì)原理
5.6.2 創(chuàng)建SqlMapClient
5.6.3 SqlMapClientTemplate的實(shí)現(xiàn)
5.7 小結(jié)
第6章 Spring事務(wù)處理的實(shí)現(xiàn)
6.1 Spring與事務(wù)處理
6.2 Spring事務(wù)處理的設(shè)計(jì)概覽
6.3 Spring事務(wù)處理的應(yīng)用場(chǎng)景
6.4 Spring聲明式事務(wù)處理
6.4.1 設(shè)計(jì)原理與基本過程
6.4.2 實(shí)現(xiàn)分析
6.5 Spring事務(wù)處理的設(shè)計(jì)與實(shí)現(xiàn)
6.5.1 Spring事務(wù)處理的編程式使用
6.5.2 事務(wù)的創(chuàng)建
6.5.3 事務(wù)的掛起
6.5.4 事務(wù)的提交
6.5.5 事務(wù)的回滾
6.6 Spring事務(wù)處理器的設(shè)計(jì)與實(shí)現(xiàn)
6.6.1 Spring事務(wù)處理的應(yīng)用場(chǎng)景
6.6.2 DataSourceTransactionManager的實(shí)現(xiàn)
6.6.3 HibernateTransactionManager的實(shí)現(xiàn)
6.7 小結(jié)
第7章 Spring遠(yuǎn)端調(diào)用的實(shí)現(xiàn)
7.1 Spring遠(yuǎn)端調(diào)用的應(yīng)用場(chǎng)景
7.2 Spring遠(yuǎn)端調(diào)用的設(shè)計(jì)概覽
7.3 Spring遠(yuǎn)端調(diào)用的實(shí)現(xiàn)
7.3.1 Spring HTTP調(diào)用器的實(shí)現(xiàn)
7.3.2 Spring Hession
7.3.3 Spring RMI的實(shí)現(xiàn)
7.4 小結(jié)
第三部分 Spring應(yīng)用實(shí)現(xiàn)篇
第8章 安全框架ACEGI的設(shè)計(jì)與實(shí)現(xiàn)
8.1 Spring ACEGI安全框架概述
8.1.1 概述
8.1.2 設(shè)計(jì)原理與基本實(shí)現(xiàn)過程
8.1.3 ACEGI的Bean配置
8.2 配置Spring ACEGI
8.3 ACEGI的Web過濾器實(shí)現(xiàn)
8.4 ACEGI驗(yàn)證器的實(shí)現(xiàn)
8.4.1 AuthenticationManager的authenticate
8.4.2 DaoAuthenticationProvider的實(shí)現(xiàn)
8.4.3 讀取數(shù)據(jù)庫(kù)用戶信息
8.4.4 完成用戶信息的對(duì)比驗(yàn)證
8.5 ACEGI授權(quán)器的實(shí)現(xiàn)
8.5.1 與Web環(huán)境的接口FilterSecurityInterceptor
8.5.2 授權(quán)器的實(shí)現(xiàn)
8.5.3 投票器的實(shí)現(xiàn)
8.6 小結(jié)
第9章 Spring DM模塊的設(shè)計(jì)與實(shí)現(xiàn)
9.1 Spring DM模塊的應(yīng)用場(chǎng)景
9.2 Spring DM的應(yīng)用過程
9.3 Spring DM設(shè)計(jì)與實(shí)現(xiàn)
9.4 小結(jié)
第10章 Spring Flex的設(shè)計(jì)與實(shí)現(xiàn)
10.1 Spring Flex模塊的應(yīng)用場(chǎng)景
10.2 Spring Flex的應(yīng)用過程
10.3 Spring Flex的設(shè)計(jì)與實(shí)現(xiàn)
10.4 小結(jié)
附錄A Spring項(xiàng)目的源代碼環(huán)境
附錄B 構(gòu)建Spring項(xiàng)目的發(fā)布包
附錄C 使用Spring IDE
附錄D Spring Pet Clinic應(yīng)用實(shí)例
我們?nèi)绾尾拍芗茸岄_發(fā)變得容易,又能享受到JavaEE提供的各種服務(wù)呢?Spring的目標(biāo)就是通過自己的努力,讓用戶體會(huì)到這種簡(jiǎn)單之中的強(qiáng)大。同時(shí),作為應(yīng)用框架,Spring不想作為另外一種復(fù)雜開發(fā)模型的替代,也就是說不想用另一種復(fù)雜性去替代現(xiàn)有的復(fù)雜性,那是換湯不換藥,并不能解決問題.這就意味著需要有新的突破。要解決這個(gè)問題,需要降低應(yīng)用的負(fù)載和框架的侵入性,Spring是怎樣做到這一點(diǎn)的呢?
Spring為我們提供的解決方案就是IoC容器和AOP支持。作為依賴反轉(zhuǎn)模式的具體實(shí)現(xiàn),IoC容器很好地降低了框架的侵入性,也可以認(rèn)為依賴反轉(zhuǎn)模式是Spring體現(xiàn)出來的核心模式。這些核心模式是軟件架構(gòu)設(shè)計(jì)中非常重要的因素,我們常常看到的MVC模式就是這樣的核心模式。使用好這些核心模式,就像我們?cè)赪eb應(yīng)用中使用MVC模式一樣,可以獲得非常大的便利。
Spring核心的模式實(shí)現(xiàn),是為應(yīng)用提供IoC容器和AOP框架,從而在企業(yè)應(yīng)用開發(fā)中引入新的核心模式,并使用戶的開發(fā)方式發(fā)生很大的變化,具體來說,就是使用POJO來完成開發(fā),在簡(jiǎn)化用戶開發(fā)的同時(shí),依然能夠使用強(qiáng)大的服務(wù),能夠?qū)崿F(xiàn)復(fù)雜的企業(yè)應(yīng)用的開發(fā)需求。
……