教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

什么是AOP?AOP有哪些優(yōu)點(diǎn)?

更新時(shí)間:2021年05月25日16時(shí)12分 來(lái)源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)

AOP的全稱是Aspect-Oriented Programming,即面向切面編程(也稱面向方面編程)。它是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充,目前已成為一種比較成熟的編程方式。

在傳統(tǒng)的業(yè)務(wù)處理代碼中,通常都會(huì)進(jìn)行事務(wù)處理、日志記錄等操作。雖然使用OOP可以通過(guò)組合或者繼承的方式來(lái)達(dá)到代碼的重用,但如果要實(shí)現(xiàn)某個(gè)功能(如日志記錄),同樣的代碼仍然會(huì)分散到各個(gè)方法中。這樣,如果想要關(guān)閉某個(gè)功能,或者對(duì)其進(jìn)行修改,就必須要修改所有的相關(guān)方法。這不但增加了開(kāi)發(fā)人員的工作量,而且提高了代碼的出錯(cuò)率。

為了解決這一問(wèn)題,AOP思想隨之產(chǎn)生。AOP采取橫向抽取機(jī)制,將分散在各個(gè)方法中的重復(fù)代碼提取出來(lái),然后在程序編譯或運(yùn)行時(shí),再將這些提取出來(lái)的代碼應(yīng)用到需要執(zhí)行的地方。這種采用橫向抽取機(jī)制的方式,采用傳統(tǒng)的OOP思想顯然是無(wú)法辦到的,因?yàn)镺OP只能實(shí)現(xiàn)父子關(guān)系的縱向的重用。雖然AOP是一種新的編程思想,但卻不是OOP的替代品,它只是OOP的延伸和補(bǔ)充。

在AOP思想中,類與切面的關(guān)系如圖1所示。

AOP是什么

圖1 類與切面的關(guān)系

從圖1可以看出,通過(guò)Aspect(切面)分別在Class1和Class2的方法中加入了事務(wù)、日志、權(quán)限和異常等功能。

AOP的使用,使開(kāi)發(fā)人員在編寫(xiě)業(yè)務(wù)邏輯時(shí)可以專心于核心業(yè)務(wù),而不用過(guò)多的關(guān)注于其他業(yè)務(wù)邏輯的實(shí)現(xiàn),這不但提高了開(kāi)發(fā)效率,而且增強(qiáng)了代碼的可維護(hù)性。

目前最流行的AOP框架有兩個(gè),分別為Spring AOP和AspectJ。Spring AOP使用純Java實(shí)現(xiàn),不需要專門(mén)的編譯過(guò)程和類加載器,在運(yùn)行期間通過(guò)代理方式向目標(biāo)類織入增強(qiáng)的代碼。AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,從Spring2.0開(kāi)始,Spring AOP引入了對(duì)AspectJ的支持,AspectJ擴(kuò)展了Java語(yǔ)言,提供了一個(gè)專門(mén)的編譯器,在編譯時(shí)提供橫向代碼的織入。



猜你喜歡:

Spring AOP實(shí)現(xiàn)原理和常見(jiàn)代理的區(qū)別

Java培訓(xùn)實(shí)戰(zhàn)教程之spring的AOP底層實(shí)現(xiàn)介紹

Spring Boot框架和傳統(tǒng)Spring框架相比有哪些優(yōu)勢(shì)??

Spring框架怎樣實(shí)現(xiàn)依賴注入?

傳智教育Java開(kāi)發(fā)培訓(xùn)

0 分享到:
和我們?cè)诰€交談!