欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
深入理解Spring的兩大特征(IOC和AOP)

一、spring 的優(yōu)點(diǎn)?

1.降低了組件之間的耦合性 ,實(shí)現了軟件各層之間的解耦

2.可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等

3.容器提供單例模式支持

4.容器提供了AOP技術(shù),利用它很容易實(shí)現如權限攔截,運行期監控等功能

5.容器提供了眾多的輔助類(lèi),能加快應用的開(kāi)發(fā)

6.spring對于主流的應用框架提供了集成支持,如hibernate,JPA,Struts等

7.spring屬于低侵入式設計,代碼的污染極低

8.獨立于各種應用服務(wù)器

9.spring的DI機制降低了業(yè)務(wù)對象替換的復雜性

10.Spring的高度開(kāi)放性,并不強制應用完全依賴(lài)于Spring,開(kāi)發(fā)者可以自由選擇spring的部分或全部

二、什么是IOC(DI)?

IOC,即控制反轉(Inversion of Control),他與依賴(lài)注入(Dependecy Injection)是同一個(gè)概念。具體的講:當某個(gè)角色需要另外一個(gè)角色協(xié)助的時(shí)候,在傳統的程序設計過(guò)程中,通常由調用者來(lái)創(chuàng )建被調用者的實(shí)例。但在spring中 創(chuàng )建被調用者的工作不再由調用者來(lái)完成,因此稱(chēng)為控制反轉。創(chuàng )建被調用者的工作由spring來(lái)完成,然后注入調用者因此也稱(chēng)為依賴(lài)注入。

它并不是一種技術(shù)實(shí)現,而是一種設計思想。在任何一個(gè)有實(shí)際開(kāi)發(fā)意義的程序項目中,我們會(huì )使用很多類(lèi)來(lái)描述它們特有的功能,并且通過(guò)類(lèi)與類(lèi)之間的相互協(xié)作來(lái)完成特定的業(yè)務(wù)邏輯。這個(gè)時(shí)候,每個(gè)類(lèi)都需要負責管理與自己有交互的類(lèi)的引用和依賴(lài),代碼將會(huì )變的異常難以維護和極度的高耦合。而IOC的出現正是用來(lái)解決這個(gè)問(wèn)題,我們通過(guò)IOC將這些相互依賴(lài)對象的創(chuàng )建、協(xié)調工作交給Spring容器去處理,每個(gè)對象只需要關(guān)注其自身的業(yè)務(wù)邏輯關(guān)系就可以了。在這樣的角度上來(lái)看,獲得依賴(lài)的對象的方式,進(jìn)行了反轉,變成了由spring容器控制對象如何獲取外部資源(包括其他對象和文件資料等等)。

舉例:某一天,你生病了,但是你不清楚自己到底得了什么病,你只知道自己頭疼,咳嗽,全身無(wú)力。這個(gè)時(shí)候你決定去藥店買(mǎi)藥,藥店有很多種藥,僅僅是治療頭疼就有好幾十種,還有西藥中藥等區別。然后你自己看了看說(shuō)明書(shū),選擇了一盒你自己覺(jué)得最能治療自己病癥的藥,付錢(qián)吃藥,期待可以早點(diǎn)好起來(lái)。 但是這個(gè)過(guò)程,對于一個(gè)病人來(lái)說(shuō),太辛苦了。頭疼,咳嗽,全身無(wú)力,還要一個(gè)個(gè)的看藥品說(shuō)明書(shū),一個(gè)個(gè)的比較哪個(gè)藥比較好,簡(jiǎn)直是太累了。這個(gè)時(shí)候,你決定直接去醫院看醫生。 醫生給你做了檢查,知道你的病癥是什么,有什么原因引起的;同時(shí)醫生非常了解有哪些藥能治療你的病痛,并且能根據你的自身情況進(jìn)行篩選。只需要短短的十幾分鐘,你就能拿到對癥下藥的藥品,即省時(shí)又省力。

在上面這個(gè)例子中,IOC起到的就是醫生的作用,它收集你的需求要求,并且對癥下藥,直接把藥開(kāi)給你。你就是對象,藥品就是你所需要的外部資源。通過(guò)醫生,你不用再去找藥品,而是通過(guò)醫生把藥品開(kāi)給你。這就是整個(gè)IOC的精髓所在。

Spring以動(dòng)態(tài)靈活的方式來(lái)管理對象 , 注入的兩種方式,設置注入和構造注入。

設置注入的優(yōu)點(diǎn):直觀(guān),自然

構造注入的優(yōu)點(diǎn):可以在構造器中決定依賴(lài)關(guān)系的順序。

三、什么是AOP?

AOP:面向切面編程,往往被定義為促使軟件系統實(shí)現關(guān)注點(diǎn)的分離的技術(shù)。系統是由許多不同的組件所組成的,每一個(gè)組件各負責一塊特定功能。除了實(shí)現自身核心功能之外,這些組件還經(jīng)常承擔著(zhù)額外的職責。例如日志、事務(wù)管理和安全這樣的核心服務(wù)經(jīng)常融入到自身具有核心業(yè)務(wù)邏輯的組件中去。這些系統服務(wù)經(jīng)常被稱(chēng)為橫切關(guān)注點(diǎn),因為它們會(huì )跨越系統的多個(gè)組件。

AOP的概念不像IOC一樣實(shí)例化舉例,現在我們以一個(gè)系統中的具體實(shí)現來(lái)講講AOP具體是個(gè)什么技術(shù)。

我們以系統中常用到的事務(wù)管控舉例子。在系統操作數據庫的過(guò)程中,不可避免地要考慮到事務(wù)相關(guān)的內容。如果在每一個(gè)方法中都新建一個(gè)事務(wù)管理器,那么無(wú)疑是對代碼嚴重的耦合和侵入。為了簡(jiǎn)化我們的開(kāi)發(fā)過(guò)程(實(shí)際上spring所做的一切實(shí)現都是為了簡(jiǎn)化開(kāi)發(fā)過(guò)程),需要把事務(wù)相關(guān)的代碼抽成出來(lái)做為一個(gè)獨立的模塊。通過(guò)AOP,確認每一個(gè)操作數據庫方法為一個(gè)連接點(diǎn),這些連接點(diǎn)組成了一個(gè)切面。當程序運行到其中某個(gè)一個(gè)切點(diǎn)時(shí),我們將事務(wù)管理模塊順勢織入對象中,通過(guò)通知功能,完成整個(gè)事務(wù)管控的實(shí)現。這樣一來(lái),所有的操作數據庫的方法中不需要再單獨關(guān)心事務(wù)管理的內容,只需要關(guān)注自身的業(yè)務(wù)代碼的實(shí)現即可。所有的事務(wù)管控相關(guān)的內容都通過(guò)AOP的方式進(jìn)行了實(shí)現。簡(jiǎn)化了代碼的內容,將目標對象復雜的內容進(jìn)行解耦,分離業(yè)務(wù)邏輯與橫切關(guān)注點(diǎn)。

下面介紹一下AOP相關(guān)的術(shù)語(yǔ):

1、通知: 通知定義了切面是什么以及何時(shí)使用的概念。Spring 切面可以應用5種類(lèi)型的通知:

  • 前置通知(Before):在目標方法被調用之前調用通知功能。
  • 后置通知(After):在目標方法完成之后調用通知,此時(shí)不會(huì )關(guān)心方法的輸出是什么。
  • 返回通知(After-returning):在目標方法成功執行之后調用通知。
  • 異常通知(After-throwing):在目標方法拋出異常后調用通知。
  • 環(huán)繞通知(Around):通知包裹了被通知的方法,在被通知的方法調用之前和調用之后執行自定義的行為。

2、連接點(diǎn):是在應用執行過(guò)程中能夠插入切面的一個(gè)點(diǎn)。

3、切點(diǎn): 切點(diǎn)定義了切面在何處要織入的一個(gè)或者多個(gè)連接點(diǎn)。

4、切面:是通知和切點(diǎn)的結合。通知和切點(diǎn)共同定義了切面的全部?jì)热荨?/p>

5、引入:引入允許我們向現有類(lèi)添加新方法或屬性。

6、織入:是把切面應用到目標對象,并創(chuàng )建新的代理對象的過(guò)程。切面在指定的連接點(diǎn)被織入到目標對象中。在目標對象的生命周期中有多個(gè)點(diǎn)可以進(jìn)行織入:

  • 編譯期: 在目標類(lèi)編譯時(shí),切面被織入。這種方式需要特殊的編譯器。AspectJ的織入編譯器就是以這種方式織入切面的。
  • 類(lèi)加載期:切面在目標加載到JVM時(shí)被織入。這種方式需要特殊的類(lèi)加載器(class loader)它可以在目標類(lèi)被引入應用之前增強該目標類(lèi)的字節碼。
  • 運行期: 切面在應用運行到某個(gè)時(shí)刻時(shí)被織入。一般情況下,在織入切面時(shí),AOP容器會(huì )為目標對象動(dòng)態(tài)地創(chuàng )建一個(gè)代理對象。SpringAOP就是以這種方式織入切面的。

面向切面編程(AOP)完善spring的依賴(lài)注入(DI),面向切面編程在spring中主要表現為兩個(gè)方面:

  1. 面向切面編程提供聲明式事務(wù)管理
  2. spring支持用戶(hù)自定義的切面

面向切面編程(aop)是對面向對象編程(oop)的補充, 面向對象編程將程序分解成各個(gè)層次的對象,面向切面編程將程序運行過(guò)程分解成各個(gè)切面。

AOP從程序運行角度考慮程序的結構,提取業(yè)務(wù)處理過(guò)程的切面,oop是靜態(tài)的抽象,aop是動(dòng)態(tài)的抽象, 是對應用執行過(guò)程中的步驟進(jìn)行抽象,,從而獲得步驟之間的邏輯劃分。

AOP框架具有的兩個(gè)特征:

  1. 各個(gè)步驟之間的良好隔離性
  2. 源代碼無(wú)關(guān)性

四、總結:

IOC:控制反轉也叫依賴(lài)注入,IOC利用java反射機制,AOP利用代理模式。所謂控制反轉是指,本來(lái)被調用者的實(shí)例是有調用者來(lái)創(chuàng )建的,這樣的缺點(diǎn)是耦合性太強,IOC則是統一交給spring來(lái)管理創(chuàng )建,將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關(guān)的屬性,讓spring容器來(lái)生成類(lèi)的實(shí)例對象以及管理對象。在spring容器啟動(dòng)的時(shí)候,spring會(huì )把你在配置文件中配置的bean都初始化好,然后在你需要調用的時(shí)候,就把它已經(jīng)初始化好的那些bean分配給你需要調用這些bean的類(lèi)。

AOP:面向切面編程。(Aspect-Oriented Programming)

AOP可以說(shuō)是對OOP的補充和完善。OOP引入封裝、繼承和多態(tài)性等概念來(lái)建立一種對象層次結構,用以模擬公共行為的一個(gè)集合。實(shí)現AOP的技術(shù),主要分為兩大類(lèi):一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對該消息進(jìn)行裝飾,以取代原有對象行為的執行;二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng )建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼,屬于靜態(tài)代理。

如果還不明白,放棄java吧!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
框架|Spring|(一)IOC/AOP概念
AOP的術(shù)語(yǔ)
『互聯(lián)網(wǎng)架構』軟件架構
2021最新 Spring面試題精選(附刷題小程序)
Spring高級程序設計 6 Spring AOP 進(jìn)階
【第六章】 AOP 之 6.1 AOP基礎 ——跟我學(xué)spring3
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久