AOP,全稱Aspect Oriented Programming,面向方面的編程。那么就要問了,什么是方面,為什么引入AOP? 一般情況下,OOP能夠很好的避免代碼重復(fù)。具體繼承可以幫助我們在不同類型之間共享相同的行為;多態(tài)讓我們可以用同樣的方式處理不同類型的對象,將注意力集中在它們的共同之處。但是,有些時(shí)候,OOP也避免不了代碼的重復(fù),比如下面的例子:
上面是安全性檢查的例子,我們希望檢查用戶是否有權(quán)限執(zhí)行某個(gè)方法,如果沒有就拋出異常。我們把安全檢查的工作放在一個(gè)方法中實(shí)現(xiàn),但是這個(gè)仍無法避免一行重復(fù)代碼的編寫。另外,當(dāng)開發(fā)者添加一個(gè)新的業(yè)務(wù)方法時(shí),它完全有可能忘記調(diào)用安全檢查的方法,從而破壞了應(yīng)用程序的安全性。為了在方法執(zhí)行的過程中識別出“應(yīng)該調(diào)用安全性檢查”的那一點(diǎn),我們需要用一種高全新的方式來看待程序結(jié)構(gòu),而OO的層次模型無法提供這種新的視角。對于這個(gè)問題,繼承愛莫能助,“安全性檢查”在這里是一個(gè)具有橫切性的問題,需要進(jìn)行安全性檢查的方法都是彼此獨(dú)立的,無法從某個(gè)通用的方法繼承下去。 AOP的目標(biāo)就是將橫切型crosscutting的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。在AOP中,我們可以單獨(dú)編寫“安全性檢查”的代碼,并將其包裝為一個(gè)方面aspect。(方面的概念出現(xiàn)嘍!)然后,我們可以告訴AOP實(shí)現(xiàn)產(chǎn)品如何在運(yùn)行時(shí)將方面織入到程序流程之中,具體的實(shí)現(xiàn)策略,請看下篇AOP的實(shí)現(xiàn)策略。
Powered by: BlogJava Copyright © kangaroo