AOP,全稱Aspect Oriented Programming,面向方面的編程。那么就要問了,什么是方面,為什么引入AOP?
一般情況下,OOP能夠很好的避免代碼重復。具體繼承可以幫助我們在不同類型之間共享相同的行為;多態讓我們可以用同樣的方式處理不同類型的對象,將注意力集中在它們的共同之處。但是,有些時候,OOP也避免不了代碼的重復,比如下面的例子:



















上面是安全性檢查的例子,我們希望檢查用戶是否有權限執行某個方法,如果沒有就拋出異常。我們把安全檢查的工作放在一個方法中實現,但是這個仍無法避免一行重復代碼的編寫。另外,當開發者添加一個新的業務方法時,它完全有可能忘記調用安全檢查的方法,從而破壞了應用程序的安全性。為了在方法執行的過程中識別出“應該調用安全性檢查”的那一點,我們需要用一種高全新的方式來看待程序結構,而OO的層次模型無法提供這種新的視角。對于這個問題,繼承愛莫能助,“安全性檢查”在這里是一個具有橫切性的問題,需要進行安全性檢查的方法都是彼此獨立的,無法從某個通用的方法繼承下去。
AOP的目標就是將橫切型crosscutting的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。在AOP中,我們可以單獨編寫“安全性檢查”的代碼,并將其包裝為一個方面aspect。(方面的概念出現嘍!)然后,我們可以告訴AOP實現產品如何在運行時將方面織入到程序流程之中,具體的實現策略,請看下篇AOP的實現策略。