- Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計原理(第2版)
- 計文柯
- 2022字
- 2018-12-31 19:55:28
第一部分 Spring核心實現(xiàn)篇
本篇將對Spring的核心IoC容器和AOP的實現(xiàn)原理進行闡述。IoC容器和AOP是Spring的核心,它們是Spring系統(tǒng)中其他組件模塊和應(yīng)用開發(fā)的基礎(chǔ)。通過這兩個核心模塊的設(shè)計和實現(xiàn)可以了解Spring倡導(dǎo)的對企業(yè)應(yīng)用開發(fā)所應(yīng)秉持的思路,比如使用POJO開發(fā)企業(yè)應(yīng)用,提供一致的編程模型,強調(diào)對接口編程等。對于這些Spring背后的開發(fā)思想和設(shè)計理念,大家都不會陌生,在Rod Johnson的經(jīng)典著作中都有全面而深刻的講解。作為參考,我們可以查看Spring官方網(wǎng)站對Spring項目的描述。如下圖所示,Spring的目標和愿景寫得很清楚。

首先,Spring的目標在于讓Java EE的開發(fā)變得更容易,這就意味著Spring框架的使用也應(yīng)該是容易的。對于開發(fā)人員而言,易用性是第一位的。為什么要讓Java EE開發(fā)變得更容易,難道以前的Java EE開發(fā)很艱難?Spring究竟是如何讓Java EE的開發(fā)變得更容易的呢?了解Java EE開發(fā)歷史的讀者都知道,正如Rod Johnson在他的著作《Expert One-on-One Java EE Design and Development》中提到的那樣,EJB模型為Java EE開發(fā)引入了過度的復(fù)雜性,這個開發(fā)模型對Java EE的開發(fā)并不友好。有沒有更好的開發(fā)模型呢?有,那就是基于POJO和簡單的Java環(huán)境直接開發(fā)應(yīng)用。這種開發(fā)模式,讓Java洗凈鉛華,恢復(fù)自然風采。使用POJO不僅能開發(fā)復(fù)雜的Java企業(yè)應(yīng)用,還可以讓Java EE開發(fā)在開發(fā)成本、開發(fā)周期、可維護性和性能上取得更大優(yōu)勢。對一般的企業(yè)應(yīng)用需求而言,重要的是如何方便地使用應(yīng)用所需要的服務(wù),而不是各種各樣的開發(fā)模型和模式。
Java語言自面世以來,以簡潔而開放的特性,吸引了眾多開發(fā)者、社區(qū)和商業(yè)公司的注意,從語言環(huán)境本身來看,它不但具有面向?qū)ο蟮恼Z言特性,還具有跨平臺的虛擬環(huán)境,使其在企業(yè)開發(fā)領(lǐng)域有獨特的優(yōu)勢。但是,隨著Java的發(fā)展,在開發(fā)企業(yè)應(yīng)用時,有技術(shù)規(guī)范凌駕于應(yīng)用需求的趨勢,比如,在EJB的開發(fā)模式中,體現(xiàn)了技術(shù)規(guī)范實現(xiàn)的復(fù)雜性,但是對應(yīng)用需求關(guān)注不足。在這個時候,Spring出現(xiàn)了,給人的第一印象是簡潔而又具有豐富的內(nèi)涵,就像第一次遇到Java一樣,這種特質(zhì)深深地吸引了開發(fā)者。Spring降低了企業(yè)應(yīng)用開發(fā)的門檻,還原了POJO的本色,讓開發(fā)者直接依賴于Java語言,直接依賴于面向?qū)ο缶幊蹋褂脽o所不在的單元測試來保證代碼質(zhì)量,使開發(fā)者有信心開發(fā)出高質(zhì)量的企業(yè)應(yīng)用。
我們?nèi)绾尾拍芗茸岄_發(fā)變得容易,又能享受到Java EE提供的各種服務(wù)呢?Spring的目標就是通過自己的努力,讓用戶體會到這種簡單之中的強大。同時,作為應(yīng)用框架,Spring不想作為另外一種復(fù)雜開發(fā)模型的替代,也就是說不想用另一種復(fù)雜性去替代現(xiàn)有的復(fù)雜性,那是換湯不換藥,并不能解決問題。這就意味著需要有新的突破。要解決這個問題,需要降低應(yīng)用的負載和框架的侵入性,Spring是怎樣做到這一點的呢?
Spring為我們提供的解決方案就是IoC容器和AOP支持。作為依賴反轉(zhuǎn)模式的具體實現(xiàn),IoC容器很好地降低了框架的侵入性,也可以認為依賴反轉(zhuǎn)模式是Spring體現(xiàn)出來的核心模式。這些核心模式是軟件架構(gòu)設(shè)計中非常重要的因素,我們常常看到的MVC模式就是這樣的核心模式。使用好這些核心模式,就像我們在Web應(yīng)用中使用MVC模式一樣,可以獲得非常大的便利。
Spring核心的模式實現(xiàn),是為應(yīng)用提供IoC容器和AOP框架,從而在企業(yè)應(yīng)用開發(fā)中引入新的核心模式,并使用戶的開發(fā)方式發(fā)生很大的變化,具體來說,就是使用POJO來完成開發(fā),在簡化用戶開發(fā)的同時,依然能夠使用強大的服務(wù),能夠?qū)崿F(xiàn)復(fù)雜的企業(yè)應(yīng)用的開發(fā)需求。比如對于依賴反轉(zhuǎn),在Spring中,我們看到的就是,Java EE的服務(wù)都被抽象到IoC容器中,并通過AOP進行有效的封裝,因為依賴注入的特性,這些復(fù)雜的依賴關(guān)系的管理被反轉(zhuǎn)并被交給容器,使復(fù)雜的依賴關(guān)系管理從應(yīng)用中解放出來了。
在Spring中,各個模塊的依賴關(guān)系通過簡單的IoC配置文件進行描述,使這些外部化的信息集中并且明了。我們在使用其他組件服務(wù)時,只需要去配置文件中了解和配置這些依賴關(guān)系即可,也就是說這里關(guān)心的是接口,至于服務(wù)的具體實現(xiàn),在使用接口定義隔離開以后,并不是應(yīng)用開發(fā)關(guān)心的重點。對應(yīng)用開發(fā)而言,只需要了解服務(wù)的接口和依賴關(guān)系的配置即可。這樣一來,可以很好地體現(xiàn)Spring的第二個信條:讓應(yīng)用開發(fā)對接口編程,而不是對類編程。這樣POJO使用Java EE服務(wù)時,可以將對這些服務(wù)實現(xiàn)的依賴降到最低,同時盡可能降低框架對應(yīng)用的侵入性。
在處理與現(xiàn)有優(yōu)秀解決方案的關(guān)系時,按照Spring的既定策略,它不會與第三方的解決方案進行競爭,而是致力于為應(yīng)用提供使用優(yōu)秀方案的集成平臺。真正地把Spring定位在應(yīng)用平臺的地位,使Spring成為一個兼容并包的開放體系的同時,最大程度降低開發(fā)者對Spring API的依賴,這是怎樣實現(xiàn)的呢?答案還是IoC容器和AOP技術(shù),也就是說,Spring API在開發(fā)過程中并不是必須使用的。對具體的服務(wù)實現(xiàn),Spring是開源軟件和模塊化的應(yīng)用平臺,雖然具體的服務(wù)是以Spring作為開發(fā)平臺的,但是客戶依然有很大的具體技術(shù)方案的選擇權(quán),可以根據(jù)應(yīng)用自身的特點選擇技術(shù)方案以支持應(yīng)用需求的實現(xiàn)。IoC和AOP這兩個核心組件,特別是IoC容器,是用戶在使用Spring完成POJO應(yīng)用開發(fā)的過程中必須使用的。這樣的應(yīng)用策略也極大地擴展了Spring的應(yīng)用場合,不僅包括Java EE應(yīng)用,還包括其他方面的應(yīng)用,如桌面應(yīng)用等。從這個意義上來講,IoC容器稱得上是Spring的最核心部分。
- 解構(gòu)產(chǎn)品經(jīng)理:互聯(lián)網(wǎng)產(chǎn)品策劃入門寶典
- Mastering phpMyAdmin 3.4 for Effective MySQL Management
- TestNG Beginner's Guide
- Selenium Design Patterns and Best Practices
- Getting Started with SQL Server 2012 Cube Development
- Visual FoxPro程序設(shè)計習題集及實驗指導(dǎo)(第四版)
- 動手學(xué)數(shù)據(jù)結(jié)構(gòu)與算法
- 從Power BI到Analysis Services:企業(yè)級數(shù)據(jù)分析實戰(zhàn)
- 深入實踐DDD:以DSL驅(qū)動復(fù)雜軟件開發(fā)
- 實驗編程:PsychoPy從入門到精通
- Flask開發(fā)Web搜索引擎入門與實戰(zhàn)
- ArcPy and ArcGIS(Second Edition)
- Mapping with ArcGIS Pro
- C++面向?qū)ο蟪绦蛟O(shè)計
- Python網(wǎng)絡(luò)爬蟲從入門到實踐