下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Spring基礎(chǔ)知識匯總 簡介 年發(fā)布了框架的第一版。 是一個從實(shí)際開發(fā)中抽取岀來的 框架,因此開發(fā),2004框架由 它完成了大量開發(fā)中的通用步驟,留給開發(fā)者的僅僅是與特定應(yīng)用相關(guān)的部分,從而大大提高 了企業(yè)應(yīng)用的開發(fā)效率??偨Y(jié)起來優(yōu)點(diǎn)如下:低侵入式設(shè)計,代碼的污染極低。的承諾。,獨(dú)立于 各種應(yīng)用服務(wù)器,基于框架的應(yīng)用,可以真正實(shí)現(xiàn) 的容器降低了業(yè)務(wù)對象替換的復(fù)雜性,提高了組件之間的解耦。的支持允許將一些通用任務(wù)如安全、事務(wù)、日志 等進(jìn)行集中式管理,從而提供了更好的復(fù)用。的和提供了與第三方持久層框架的良好整合,并簡化了底層的數(shù)據(jù)庫 訪問。的高度開放性,并不強(qiáng)制應(yīng)用完全依賴于,開發(fā)者可自由選用框
2、架的部分或全部。框架的組成結(jié)構(gòu)圖如 下所示: 的核心機(jī)制1 / 10 Spring基礎(chǔ)知識匯總管理 程序主要是通過容器來訪問容器中的,是容器最常用的接 口,該接口有如下兩個實(shí)現(xiàn)類:從類加載路徑下搜索配置文件,并根據(jù)配置文件來創(chuàng)建容器。:從文件 系統(tǒng)的相對路徑或絕對路徑下去搜索配置文件,并根據(jù)配置文件來創(chuàng)建容器。 ();=();=(, p (); 使用 ,然后把的包都放入其中,當(dāng)然也可以將包直接放在項目的在等工具中,用戶可以 自建 ,在項目發(fā)布時,需要將用戶庫所引用的文件隨應(yīng)用一起發(fā)布,目錄下,但是如果使用所 使用的復(fù)制到目錄下, 這是因?yàn)閷τ谝粋€應(yīng)用, 部署應(yīng)用時不會將用戶庫的文件 就是將 復(fù)
3、制到 下,需要手動復(fù)制。 依賴注入 框架的核心功能有兩個: 容器作為超級大工廠,負(fù)責(zé)創(chuàng)建、 管理所有的對象,這些對象被稱為。 的方式來管理之間的依賴關(guān)系。依賴注入容器管理容器中之間的依賴關(guān)系,使 用一種被稱為 使用依賴注入,不僅可以為注入普通的屬性值,還可以注入其他的引用。依賴注入是 一種 優(yōu)秀的解耦方式, 其可以讓以配置文件組織在一起, 而不是以硬編碼的方式耦合在一起。 理 解依賴注入 是第一個高度重視以配置文件來管理實(shí)例的協(xié)作關(guān)系的人, 他給這種方式起了一個名字: ),因此不管是依賴注 為這種方式起了另一個名稱:依賴注入( ,)。后來 控制反轉(zhuǎn)(入,還 是控制反轉(zhuǎn),其含義完全相同。當(dāng)某個對
4、象(調(diào)用者)需要調(diào)用另一個對象(被依賴對象)的 方法時, 在傳統(tǒng)模式下通常有兩種做法: 主動創(chuàng)建被依賴對象,然后再調(diào)用被依賴對象的方法。原始做法 1. : 調(diào)用者通過工廠去獲取被依賴對象,最后再調(diào)主動調(diào)用者先找到被依賴對象的工廠,然后簡單工廠模式2. : 用被依賴對象的方法。 2 / 10 基礎(chǔ)知識匯總 Spring 二字,這必然會導(dǎo)致調(diào)用者與被依賴對象實(shí)現(xiàn)類的硬編碼耦合,非常 不利主動 注意上面的接 被動 于項目升級的維護(hù)。 使用框架之后, 調(diào)用者無需 主動 獲取被依賴對象, 調(diào)用者只要受容器為調(diào)用者的成員變量賦值即可, 由此可見, 使用后, 調(diào)用者獲取被依賴對象的 方式 稱之為控制反轉(zhuǎn)。由
5、原來的主動獲取,變成了被動接受所以 相當(dāng)于為調(diào)另外從容器的角度來看,容器負(fù)責(zé)將被依賴對象賦值給調(diào)用者的成員變量 用者 注入它依賴的實(shí)例,因此稱之為依賴注入。 設(shè)值注入設(shè)值注入是指容器通過成員變量的方法來注入被依賴對象。這種注入方式簡單、直觀, 因 而在的依賴注入里大量使用。 構(gòu)造注入 利用構(gòu)造器來設(shè)置依賴關(guān)系的方式, 被稱為構(gòu)造注入。 通俗來說, 就是驅(qū)動在底層以反射方式執(zhí)行帶指定參數(shù)的構(gòu)造器, 當(dāng)執(zhí)行帶參數(shù)的構(gòu)造器時, 就 可利用構(gòu)造器參數(shù)對成員變 這就是構(gòu)造注入的本質(zhì)。量執(zhí)行初始化 兩種注入方式的對比 設(shè)值 注入有如下優(yōu)點(diǎn): 與傳統(tǒng)的的寫法更相似,程序開發(fā)人員更容易理解、接受。通過方法設(shè)定
6、依賴關(guān)系顯得更加直 觀、自 然。 對于復(fù)雜的依賴關(guān)系,如果采用構(gòu)造注入,會導(dǎo)致構(gòu)造器過于臃腫,難以閱讀。在創(chuàng)建實(shí)例時,需要 同 時實(shí)例化其依賴的全部實(shí)例,因而導(dǎo)致性能下降。而使用設(shè)值注入,則能避免這些問題。 尤其在某些成員變量可選 的情況下,多參數(shù)的構(gòu)造器更加笨重。 構(gòu)造注入優(yōu)勢如下: 構(gòu)造注入可以在構(gòu)造器中決定依賴關(guān)系的注入順 序,優(yōu)先依賴的優(yōu)先注入。 對于依賴關(guān)系無需變化的,構(gòu)造注入更有用處。因?yàn)闆]有方法,所有的依賴關(guān)系全部在構(gòu) 造器內(nèi)設(shè)定, 無須擔(dān)心后續(xù)的代碼對依賴關(guān)系產(chǎn)生破壞。 依賴關(guān)系只能在構(gòu)造器中設(shè)定,則只有組件的創(chuàng)建者才能 改變組件的依賴關(guān)系,對組件的調(diào)用者而言, 組件內(nèi)部的依賴
7、關(guān)系完全透明,更符合高內(nèi)聚的原則。 注意: 建議采用設(shè)值注入為主,構(gòu)造注入為輔的注入策略。對于依賴關(guān)系無須變化的注入,盡量 采用 構(gòu)造注入;而其他依賴關(guān)系的注入,則考慮采用設(shè)值注入。 3 / 10 Spring 基礎(chǔ)知識匯總 容器中的 對于開發(fā)者來說, 開發(fā)者使用框架主要是做兩件事: 開發(fā); 配置。 對于框架來說, 它這就是所謂依賴注入要做的就是根據(jù)配置文件來創(chuàng)建實(shí) 例,并調(diào)用實(shí)例的方法完成 的本質(zhì)。 容器中的作用域 當(dāng)通過容器創(chuàng)建一個實(shí)例時,不僅可以完成 實(shí)例的實(shí)例化,還可以為指定特定的作用域。 支持如下五種作用域: 容器中,作用域的將只生成一 個實(shí)例。 1. : 單例模式,在整個 方法獲取
8、作用域的時,都將產(chǎn)生一個新的實(shí)例。 2.: 每次通過容器的 ()對于一次請求, 作用域的將只生成一個實(shí)例,這意味著,在同一次請求內(nèi),程序每次請求該,得: 3. 到的總是同一個實(shí)例。只有在應(yīng)用中使用時,該作用域才真正有效。對于一次會話,作用域的將只生成一個實(shí)例,這 意味著,在同一次會話內(nèi), 程序每次請求該, 得 4. 到的總是同一個實(shí)例。 只有在應(yīng)用中使用時, 該作用域才真正有效。 的時候有效,同樣只在應(yīng)用中有效。 對應(yīng)一個實(shí)例。在典型的情況下,僅在使用 5. : 每個全局的 如果不指定的作用域,默認(rèn)使用作用域。作用域的的創(chuàng)建、銷毀代價比較大。而作用域的 實(shí)例一旦創(chuàng)建成果,就可以重復(fù)使用。因此,
9、應(yīng)該盡量避免將設(shè)置成作用域。 使用自動裝 配注入合作者 能自動裝配與之間的依賴關(guān)系, 即無須使用顯式指定依賴, 而是由容器 檢查配置文件內(nèi)容, 根據(jù)某種規(guī)則,為調(diào)用者注入被依賴的。元自動裝配可通過元素的屬 性指定, 該屬性對配置文件中所有的起作用; 也可通過對 素的屬性指定, 該屬性只對該起作用。 和可以接受如下值: 不使用自動裝配。依賴必須通過元素定義。這是默認(rèn)配置,在較大的部署環(huán)境中不鼓勵改變 這個配置, : 顯式配置合作者能夠得到更清晰的依賴關(guān)系。 根據(jù)方法名進(jìn)行自動裝配。容器查找容器中全部,找出其與方法名去 掉前綴,并小寫首字母后同名的 : 來完成注入。如果沒有找到匹配的實(shí)例,則不會進(jìn)
10、行任何注入。 根據(jù)方法的形參類型來自動裝配。容器查找容器中 的全部,如果正好有一個類型與方法的形參類型匹 : 配,就自動注入這個;如果找到多個這樣的,就拋出一個異常;如果沒有找到這樣的,則什么都不會 發(fā)生,方法不會 被調(diào)用。 4 / 10 基礎(chǔ)知識匯總 Spring 與類似,區(qū)別是用于自動匹配構(gòu)造器的參數(shù)。如果容器不能恰好找到一個與構(gòu)造器參 數(shù)類型匹配的, : 則會拋出一個異常。 容器根據(jù)內(nèi)部結(jié)構(gòu), 自行決定使用或策略。 如果找到一個默認(rèn)的構(gòu)造函數(shù), 那么就會應(yīng)用策略。 : 當(dāng)一個既使用自動裝配依賴, 又使用顯式指定依賴時, 則顯式指定的依賴覆蓋自動裝配依賴; 對 于大型的應(yīng)用, 不鼓勵使用自
11、動裝配。 雖然使用自動裝配可減少配置文件的工作量, 但大大將死 了依賴關(guān)系的清晰性和透明性。依賴關(guān)系的裝配依賴于源文件的屬性名和屬性 類型,導(dǎo)致與之 間的耦合降低到代碼層次,不利于高層次解耦。 通過設(shè)置可以將排除在自動裝配之外 ? 種 方式創(chuàng)建的 3 使用構(gòu)造器創(chuàng)建實(shí)例 使用構(gòu)造器來創(chuàng)建實(shí)例是 最常見的情況,如果不采用構(gòu)造注入,底層會調(diào)用類的無參數(shù)構(gòu) 造器來創(chuàng)建實(shí)例,因此要求該 類提供無參數(shù)的構(gòu)造器。 采用默認(rèn)的構(gòu)造器創(chuàng)建實(shí)例, 對實(shí)例的所有屬性執(zhí)行默認(rèn)初始化, 即所 有的基本類型的值 0 或;所有的引用類型的值初始化為。初始化為 使用靜態(tài)工廠 方法創(chuàng)建 使用靜態(tài)工廠方法創(chuàng)建實(shí)例時,屬性也必須
12、指定,但此時屬性并不是指定實(shí)例 的實(shí)現(xiàn)類, 而是靜態(tài)工廠類,通過該屬性知道由哪個工廠類來創(chuàng)建實(shí)例。除此之外,還需要使 用屬性來指定靜態(tài)工廠方法, 將調(diào)用靜態(tài)工廠方法返回一個實(shí)例, 一旦獲得了指定實(shí)例, 后面的 處理步驟與采用普通方法創(chuàng)建實(shí)例完全一樣。如果靜態(tài)工廠方 法需要參數(shù),則使用元素指定 靜態(tài)工廠方法的參數(shù)。 調(diào)用實(shí)例工廠方法創(chuàng)建 實(shí)例工廠方法與靜態(tài)工廠方法 只有一個不同:調(diào)用靜態(tài)工廠方法只需使用工廠類即可,而 元素?zé)o須屬性,調(diào)用實(shí)例工廠方 法則需要工廠實(shí)例。使用實(shí)例工廠方法時,配置實(shí)例的 配置實(shí)例工廠方法使用指定工廠實(shí)例。 采用實(shí)例工廠方法創(chuàng)建的元素時需要指定如下兩個屬性:5 / 10
13、Spring 基礎(chǔ)知識匯總 : 該屬性的值為工廠的。 : 該屬性指定實(shí)例工廠的工廠方法。 若調(diào)用實(shí)例 工廠方法時需要傳入?yún)?shù),則使用元素確定參數(shù)值。 協(xié)調(diào)作用域不同 步的 當(dāng)作用域的依賴于作用域的時,會產(chǎn)生不同步的現(xiàn)象,原因是因?yàn)楫?dāng)容器初始化時, 容器然后才創(chuàng),由于,因此在初始化依賴于一一之前,會先創(chuàng)建會預(yù)初始化容器中所有的 建注入,接下里將。解決不同步的方法有兩種:實(shí)例作用域的每次需要作用域的時,主動向容器請求 新的實(shí)例,即可保證每次注入的:放棄依賴注入 都是最新的實(shí)例。方法注入通常使用方法注入,使用方法注入可以讓 容器重寫容器中的抽象或具體方法,利用方法注入 : 。通過使用動態(tài)代理或庫修改
14、客戶端的二進(jìn)制碼,返回查找容器中其他的結(jié)果,被查找的通常是一個 從而實(shí)現(xiàn)上述要 求。建議采用第二種方法,使用方法注入。為了使用方法注入,大致需要如下兩步:將調(diào)用者的 實(shí)現(xiàn)類定義為抽象類,并定義一個抽象方法來獲取被依賴的。 1. 元素中添加在2.子元素讓為調(diào)用者的實(shí)現(xiàn)類實(shí)現(xiàn)指定的抽象方法。注意: 元素所指定的抽象方法,如果目標(biāo)抽象類實(shí)現(xiàn)過接會采用運(yùn)行時動態(tài)增強(qiáng)的方式來實(shí)現(xiàn)口, 會采用動態(tài)代理來實(shí)現(xiàn)該抽象類,并為之實(shí)現(xiàn)抽象方法;如果目標(biāo)抽象類沒有實(shí)現(xiàn)過的包中已經(jīng) 集成了類庫。接口,會采用實(shí)現(xiàn)該抽象類,并為之實(shí)現(xiàn)抽象方法。4.0兩種后處 理器 提供了兩種常用的后處理器:這種后處理器會對容器中進(jìn)行后處
15、理,對進(jìn)行額外加強(qiáng)。后處 理器 這種后處理器會對容器進(jìn)行后處理,用于增強(qiáng)容器功能。容器后處理器: 后處理器 后處理器是一種特殊的,這種特殊的并不對外提供服務(wù),它甚至可以無須屬 性,它主要負(fù)責(zé)對容器中的其他執(zhí)行后處理,例如為容器中的目標(biāo)生成代理等,這種稱為后處理 器。后處理器會在實(shí)例創(chuàng)建成功之后,對實(shí)例進(jìn)行進(jìn)一步的增強(qiáng)處理。后處理器必須實(shí)現(xiàn)接口, 同時必須實(shí)現(xiàn)該接口的兩個方法。6 / 10 Spring基礎(chǔ)知識匯總 (,)i.該方法的第一個參數(shù)是系統(tǒng)即將進(jìn)行后處理的實(shí)例,第二個參數(shù)是 該的配置: (,)2.:該方法的第一個參數(shù)是系統(tǒng)即將進(jìn)行后處理的實(shí)例,第二個參數(shù)是該的配置 容器中一旦注冊了 后
16、處理器,后處理器就會自動啟動,在容器中每個創(chuàng)建時自動工作,后處理器兩個方法的回調(diào) 時機(jī)如下圖: 兀風(fēng) J astir 1:I; ill 1i ill 5S 然后 注意一點(diǎn),如果使用作為容器,則必須手動注冊后處理器,程序必須獲取后處理器實(shí)例, 手動注冊。);=()( (););()(P =容器后處理器 后處理器負(fù)責(zé)處理容器中的所有實(shí)例,而容器后處 理器則負(fù)責(zé)處理容器本身。容器后處理 ()實(shí)現(xiàn)該方法的方法體就是對容器進(jìn)行的處器必須實(shí)現(xiàn) 接口,并實(shí)現(xiàn)該接口的一個方法 理,這種處理可以對容器進(jìn)行自定義擴(kuò)展,當(dāng)然也可以對容器 不進(jìn)行任何處理。類似于,可自動檢測到容器中的容器后處理器,并且自動注冊容器后處
17、理器。 但若使用作為容器,則必須手動調(diào)用該容器后處理器來處理容器。 支持的零配 置搜索類 提供如下幾個來標(biāo)注:類標(biāo)注一個普通的 :標(biāo)注一個控制器組件類7 / 10 Spring基礎(chǔ)知識匯總 標(biāo)注一個業(yè)務(wù)邏輯組件類: 標(biāo)注一個組件類: 在配置文件中做如下配置,指定自動掃描的包: / 使用配置依賴 位于包下,是來自規(guī)范的一個,直接借鑒了該,通過使用該為目標(biāo) 指定協(xié)作者。使用與元素的屬性有相同的效果。不僅可以修飾方法,也可以直接修飾實(shí)例變量, 如果使用修飾實(shí)例變量將會更加簡單,此時將會直接使用規(guī)范的注入,此時連方法都可以不要。 使用和定制生命周期行為 和同樣位于包下, 也是來自規(guī)范的兩個, 直接借鑒
18、 了它們,用于定制容器中的生命周期行為。它們都用于修飾方法, 無須任何屬性。其中前者修飾 的方法時的初始化方法;而后者修飾的方法時銷毀之前的方法。4.0增強(qiáng)的自動 裝配和精確裝配 提供了注解來指定自動裝配,可以修飾方法、普通方法、實(shí)例變量 和構(gòu)造器等。當(dāng)使用標(biāo)注方法時,默認(rèn)采用自動裝配策略。在這種策略下,符合自動裝配類型的 候選實(shí)例常常有多個,這個時候就可能引起異常,為了實(shí)現(xiàn)精確的自動裝配,提供了注解,通過 使用,允 許根據(jù)的來執(zhí)行自動裝配。的為什么需要 )也就是面向切面編程,作 為面向?qū)ο缶幊痰囊环N補(bǔ)充,已經(jīng)成為一種比較成熟的編( 程方式。其實(shí)問世的時間并不太長,和互為補(bǔ)充,面向切面編程將程序運(yùn)行過程分解成各個切 面。專門用于處理系統(tǒng)中分布于各個模塊(不同方法)中的交叉關(guān)注點(diǎn)的問題,在應(yīng)用中,常常 通過來處理一些具有橫切性質(zhì)的系統(tǒng)級服務(wù),如事務(wù)管理、安全檢查、緩存、對象池管理等, 已經(jīng)成為一種非常常用的解決方案。使用實(shí)現(xiàn) 8 / 10 基礎(chǔ)知識匯總
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年銷售人員入職培訓(xùn)與職業(yè)發(fā)展合同
- 公開課《土地的誓言》課件
- 區(qū)塊鏈在體育領(lǐng)域的應(yīng)用案例考核試卷
- 2025版學(xué)校浴室熱水供應(yīng)設(shè)備采購與安裝合同3篇
- 2025版土地使用權(quán)出讓居間合同(高端定制版)3篇
- 2025年博主合作廣告合同
- 2025年度健康養(yǎng)生門面店鋪轉(zhuǎn)讓及服務(wù)項目合作協(xié)議4篇
- 2025年博物文化貸款合同
- 2025年高校外國文教專家教學(xué)與研究合作合同3篇
- 2025年公司增資協(xié)議書模板
- 乳腺癌的綜合治療及進(jìn)展
- 【大學(xué)課件】基于BGP協(xié)議的IP黑名單分發(fā)系統(tǒng)
- 2025年八省聯(lián)考高考語文試題真題解讀及答案詳解課件
- 信息安全意識培訓(xùn)課件
- 2024年山東省泰安市初中學(xué)業(yè)水平生物試題含答案
- 美的MBS精益管理體系
- 2024安全員知識考試題(全優(yōu))
- 中國移動各省公司組織架構(gòu)
- 昆明手繪版旅游攻略
- 法律訴訟及咨詢服務(wù) 投標(biāo)方案(技術(shù)標(biāo))
- 格式塔心理咨詢理論與實(shí)踐
評論
0/150
提交評論