學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

aop的介紹作用和功能有哪些

時(shí)間: 謝君787 分享

  AOP是OOP的延續(xù),是軟件開(kāi)發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,小編在此整理了aop的相關(guān)內(nèi)容,供大家參閱,希望大家在閱讀過(guò)程中有所收獲!

  AOP的介紹

  區(qū)分

  AOP、OOP在字面上雖然非常類似,但卻是面向不同領(lǐng)域的兩種設(shè)計(jì)思想。OOP(面向?qū)ο缶幊?針對(duì)業(yè)務(wù)處理過(guò)程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加清晰高效的邏輯單元?jiǎng)澐帧?/p>

  而AOP則是針對(duì)業(yè)務(wù)處理過(guò)程中的切面進(jìn)行提取,它所面對(duì)的是處理過(guò)程中的某個(gè)步驟或階段,以獲得邏輯過(guò)程中各部分之間低耦合性的隔離效果。這兩種設(shè)計(jì)思想在目標(biāo)上有著本質(zhì)的差異。

  上面的陳述可能過(guò)于理論化,舉個(gè)簡(jiǎn)單的例子,對(duì)于“雇員”這樣一個(gè)業(yè)務(wù)實(shí)體進(jìn)行封裝,自然是OOP/OOD的任務(wù),我們可以為其建立一個(gè)“Employee”類,并將“雇員”相關(guān)的屬性和行為封裝其中。而用AOP設(shè)計(jì)思想對(duì)“雇員”進(jìn)行封裝將無(wú)從談起。

  同樣,對(duì)于“權(quán)限檢查”這一動(dòng)作片斷進(jìn)行劃分,則是AOP的目標(biāo)領(lǐng)域。而通過(guò)OOD/OOP對(duì)一個(gè)動(dòng)作進(jìn)行封裝,則有點(diǎn)不倫不類。

  換而言之,OOD/OOP面向名詞領(lǐng)域,AOP面向動(dòng)詞領(lǐng)域。

  關(guān)系

  很多人在初次接觸 AOP 的時(shí)候可能會(huì)說(shuō),AOP 能做到的,一個(gè)定義良好的 OOP 的接口也一樣能夠做到,我想這個(gè)觀點(diǎn)是值得商榷的。AOP和定義良好的 OOP 的接口可以說(shuō)都是用來(lái)解決并且實(shí)現(xiàn)需求中的橫切問(wèn)題的方法。但是對(duì)于 OOP 中的接口來(lái)說(shuō),它仍然需要我們?cè)谙鄳?yīng)的模塊中去調(diào)用該接口中相關(guān)的方法,這是 OOP 所無(wú)法避免的,并且一旦接口不得不進(jìn)行修改的時(shí)候,所有事情會(huì)變得一團(tuán)糟;AOP 則不會(huì)這樣,你只需要修改相應(yīng)的 Aspect,再重新編織(weave)即可。 當(dāng)然,AOP 也絕對(duì)不會(huì)代替 OOP。核心的需求仍然會(huì)由 OOP 來(lái)加以實(shí)現(xiàn),而 AOP 將會(huì)和 OOP 整合起來(lái),以此之長(zhǎng),補(bǔ)彼之短。

  aop的名稱含義

  Aspect Oriented Programming(AOP)是較為熱門(mén)的一個(gè)話題。AOP,國(guó)內(nèi)大致譯作“面向切面編程”。

  “面向切面編程”,這樣的名字并不是非常容易理解,且容易產(chǎn)生一些誤導(dǎo)。筆者不止一次聽(tīng)到類似“OOP/OOD11即將落伍,AOP是新一代軟件開(kāi)發(fā)方式”這樣的發(fā)言。顯然,發(fā)言者并沒(méi)有理解AOP的含義。Aspect,沒(méi)錯(cuò),的確是“方面”的意思。不過(guò),華語(yǔ)傳統(tǒng)語(yǔ)義中的“方面”,大多數(shù)情況下指的是一件事情的不同維度、或者說(shuō)不同角度上的特性,比如我們常說(shuō):“這件事情要從幾個(gè)方面來(lái)看待”,往往意思是:需要從不同的角度來(lái)看待同一個(gè)事物。這里的“方面”,指的是事物的外在特性在不同觀察角度下的體現(xiàn)。而在AOP中,Aspect的含義,可能更多的理解為“切面”比較合適。所以筆者更傾向于“面向切面編程”的譯法。

  可以通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加功能的一種技術(shù)。AOP實(shí)際是GoF設(shè)計(jì)模式的延續(xù),設(shè)計(jì)模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,提高代碼的靈活性和可擴(kuò)展性,AOP可以說(shuō)也是這種目標(biāo)的一種實(shí)現(xiàn)。

  在Spring中提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

  aop的主要功能

  日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等

  主要意圖

  將日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等代碼從業(yè)務(wù)邏輯代碼中劃分出來(lái),通過(guò)對(duì)這些行為的分離,我們希望可以將它們獨(dú)立到非指導(dǎo)業(yè)務(wù)邏輯的方法中,進(jìn)而改變這些行為的時(shí)候不影響業(yè)務(wù)邏輯的代碼。

  aop的作用

  面向過(guò)程編程離我們已經(jīng)有些遙遠(yuǎn),面向?qū)ο缶幊陶髟字浖澜?。?dāng)每個(gè)新的軟件設(shè)計(jì)師都被要求掌握如何將需求功能轉(zhuǎn)化成一個(gè)個(gè)類,并且定義它們的數(shù)據(jù)成員、行為,以及它們之間復(fù)雜的關(guān)系的時(shí)候,面向切面編程(Aspect-Oriented Programming,AOP)為我們帶來(lái)了新的想法、新的思想、新的模式。

  如果說(shuō)面向?qū)ο缶幊淌顷P(guān)注將需求功能劃分為不同的并且相對(duì)獨(dú)立,封裝良好的類,并讓它們有著屬于自己的行為,依靠繼承和多態(tài)等來(lái)定義彼此的關(guān)系的話;那么面向切面編程則是希望能夠?qū)⑼ㄓ眯枨蠊δ軓牟幌嚓P(guān)的類當(dāng)中分離出來(lái),能夠使得很多類共享一個(gè)行為,一旦發(fā)生變化,不必修改很多類,而只需要修改這個(gè)行為即可。

  面向切面編程是一個(gè)令人興奮不已的新模式。就開(kāi)發(fā)軟件系統(tǒng)而言,它的影響力必將會(huì)和有著數(shù)十年應(yīng)用歷史的面向?qū)ο缶幊桃粯泳薮蟆C嫦蚯忻婢幊毯兔嫦驅(qū)ο缶幊滩坏皇腔ハ喔?jìng)爭(zhēng)的技術(shù)而且彼此還是很好的互補(bǔ)。面向?qū)ο缶幊讨饕糜跒橥粚?duì)象層次的公用行為建模。它的弱點(diǎn)是將公共行為應(yīng)用于多個(gè)無(wú)關(guān)對(duì)象模型之間。而這恰恰是面向切面編程適合的地方。有了 AOP,我們可以定義交叉的關(guān)系,并將這些關(guān)系應(yīng)用于跨模塊的、彼此不同的對(duì)象模型。AOP 同時(shí)還可以讓我們層次化功能性而不是嵌入功能性,從而使得代碼有更好的可讀性和易于維護(hù)。它會(huì)和面向?qū)ο缶幊毯献鞯煤芎谩?/p>


猜你感興趣:

1.程序員簡(jiǎn)歷個(gè)人評(píng)價(jià)

2.java軟件工程師簡(jiǎn)歷

3.java工程師簡(jiǎn)歷范文免費(fèi)參考

4.悄無(wú)聲息的意思勢(shì)什么如何造句

5.java簡(jiǎn)歷中項(xiàng)目經(jīng)驗(yàn)怎么寫(xiě)范文

6.八年級(jí)數(shù)學(xué)上冊(cè)三角形的內(nèi)角精選練習(xí)題

1874441