01Spring Framework 概述
今日內(nèi)容
Spring介紹
Spring核心內(nèi)容 IOC和AOP
Spring IOC/DI 詳細(xì)理解
說(shuō)明
以下的Spring指的都是Spring社區(qū)中提供的一個(gè)核心解決方案,也就是Spring Framework 框架
一.Spring ?介紹
1.1 概述
Spring是一個(gè)輕量級(jí)的Java開(kāi)發(fā)框架。使用框架的主要優(yōu)勢(shì)之一就是分層架構(gòu),方便解耦。Spring的核心是IOC(依賴注入控制反轉(zhuǎn))和AOP(面向切面)。同時(shí)Spring可以整合其他框架
1.2 Spring 分層架構(gòu)
Spring框架是一個(gè)分層架構(gòu),由很多模塊組成,允許應(yīng)用程序自由選擇和組裝相應(yīng)的功能模塊,模塊圖如下:





二. Spring核心內(nèi)容 IOC和AOP
2.1 IOC
IOC:控制反轉(zhuǎn)(Inversion of Control):
底層采用了工廠模式。Spring容器就像是一個(gè)工廠,管理著對(duì)象的生命周期。開(kāi)發(fā)同學(xué)只需要在Spring的配置文件中配置對(duì)應(yīng)的bean以及設(shè)置相應(yīng)的屬性,讓Spring容器來(lái)生成類的實(shí)例對(duì)象以及管理對(duì)象
就像生活中的工廠車(chē)間一樣,我們會(huì)只需要在車(chē)間控制面板輸入?yún)?shù),之后物品的生產(chǎn)和加工就交給工廠來(lái)自動(dòng)加工。我們將產(chǎn)品的加工交給了工廠來(lái)進(jìn)行處理
DI:依賴注入(Dependency Injection):
利用了 java 反射,Spring容器啟動(dòng)的時(shí)候,會(huì)把配置文件中配置的bean都初始化好。然后在你調(diào)用的使用就會(huì)把已經(jīng)初始化好的bean分配給你需要調(diào)用的這些調(diào)用方。
就像工廠中的控制面板,我們輸入?yún)?shù),工廠就根據(jù)參數(shù)來(lái)進(jìn)行處理
2.2 AOP
AOP(面向切面編程)可以說(shuō)是對(duì)OOP(面向?qū)ο缶幊蹋┑难a(bǔ)充。OOP的三大特征是封裝,繼承,多態(tài)建立了一種層次結(jié)構(gòu),這種層次結(jié)構(gòu)允許進(jìn)行縱向開(kāi)發(fā),但是不適合橫向開(kāi)發(fā)。例如:日志功能。日志功能一般橫向地散布在所有對(duì)象層次中,而它與對(duì)象的核心功能毫無(wú)關(guān)系。這種散布在各處的無(wú)關(guān)的代碼我們稱為是“橫切”代碼。
AOP利用的是一種“橫切”技術(shù)。他能將影響多個(gè)類的的公共行為封裝到一個(gè)可重用的模塊中。從而減少代碼量。例如:將日志相關(guān)的代碼封裝成一個(gè)類。
AOP說(shuō)白了就是說(shuō)將那些與業(yè)務(wù)無(wú)關(guān)但是也卻被各業(yè)務(wù)模塊所共同調(diào)用的邏輯封裝起來(lái)。例如權(quán)限認(rèn)證,日志,事務(wù)等。這樣便于減少系統(tǒng)的重復(fù)代碼,降低模塊之間的耦合度,便于維護(hù)與管理。
三. Spring IOC/DI 詳細(xì)理解
說(shuō)白了就是將Bean的生命周期,如對(duì)象的創(chuàng)建,管理,銷毀交給Spring容器來(lái)進(jìn)行管理。開(kāi)發(fā)同學(xué)只需將要?jiǎng)?chuàng)建的Bean在文件中進(jìn)行配置。Spring容器啟動(dòng)后就會(huì)創(chuàng)建你所配置的這些Bean。在容器運(yùn)行期間動(dòng)態(tài)的返回調(diào)用者所需要的Bean。Spring容器在創(chuàng)建對(duì)象的時(shí)候使用的是工廠模式程序在運(yùn)行期間動(dòng)態(tài)獲取Bean是采用反射方式
3.1 IOC/DI
IOC — Inversion Of Control(控制反轉(zhuǎn))
DI — Dependency Injection(依賴注入)
這兩個(gè)是一種設(shè)計(jì)思想,IOC 與 DI 是同一個(gè)概念的不同角度描述
3.1.1 IOC 何為控制反轉(zhuǎn)
例如,你想買(mǎi)房,你的自己找房源,找房東啥的都是自己去做。現(xiàn)在出現(xiàn)了一個(gè)房屋中介它可以完成找房的全部過(guò)程,然后向你推薦,你只需獲取結(jié)果就行,這樣就把找房的過(guò)程交給了第三方,這就是控制反轉(zhuǎn)
?
在 Java 開(kāi)發(fā)中,IOC 意味著你把設(shè)計(jì)好的對(duì)象交給 Spring 容器控制,而不是自己在對(duì)象內(nèi)部控制
?
理解IOC的關(guān)鍵就是兩點(diǎn):
誰(shuí)控制誰(shuí)、控制什么:Spirng 容器控制了對(duì)象生命周期(何時(shí)創(chuàng)建,合適銷毀等)。控制了外部資源的獲取。如其他對(duì)象等
為何是反轉(zhuǎn)、反轉(zhuǎn)了什么:Spring 容器幫我們查找需要哪些依賴的對(duì)象,我們只是被動(dòng)的接受依賴的對(duì)象。反轉(zhuǎn)了依賴對(duì)象的獲取,我們由主動(dòng)獲取變?yōu)楸粍?dòng)獲取。這里的 “我們” 指的是當(dāng)前對(duì)象,“依賴的對(duì)象”指的是當(dāng)前對(duì)象所需使用的對(duì)象
3.1.2 DI 何為依賴
理解 DI 的兩個(gè)關(guān)鍵點(diǎn)是:
誰(shuí)依賴誰(shuí),為什么需要依賴 :應(yīng)用程序依賴 Spring 容器;應(yīng)用程序需要 Spring 容器來(lái)為對(duì)象提供所需的外部資源。如其他對(duì)象
誰(shuí)注入誰(shuí),注入什么:Spring 容器為應(yīng)用程序進(jìn)行注入;注入應(yīng)用程序所依賴的對(duì)象
3.2 IOC/DI 思想
IOC/DI 很好的體現(xiàn)了 “ 別找我們,我們找你 ”的思想。即由 Spring 容器來(lái)管理對(duì)象 并且 Spring 容器幫助對(duì)象找到要依賴的對(duì)象。而不是由對(duì)象主動(dòng)去找
四. IOC/DI 總結(jié)
IOC:所有的類都會(huì)在 Spring 容器中注冊(cè),當(dāng)一個(gè)對(duì)象需要某些對(duì)象的時(shí)候,Spring 容器在運(yùn)行的時(shí)候就會(huì)把這些對(duì)象給這個(gè)對(duì)象。對(duì)象的生命周期由 Spring 容器進(jìn)行管理。IOC 是通過(guò) 工廠模式 和 代理某事 所實(shí)現(xiàn)的
?
DI:DI 的重點(diǎn)是在程序運(yùn)行期間,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所依賴的其他對(duì)象。DI 的實(shí)現(xiàn)方式是通過(guò) Java 反射實(shí)現(xiàn)的
?
控制的什么被反轉(zhuǎn)了:獲取依賴對(duì)象的方式反轉(zhuǎn)了!?。?/span>
五. Spring 家族
Spring發(fā)展至今,家族成員已經(jīng)非常龐大,以下僅列出一些常見(jiàn)的家族項(xiàng)目。更多家族成員請(qǐng)?jiān)L問(wèn):http://spring.io/projects

?
關(guān)注點(diǎn)贊,學(xué)習(xí)編程不迷路,筆芯?~
