淺談AOP(一)
什麼是AOP?
Aspect Oriented Programming,裝逼的最高境界就是不假思索的說出來這三個詞,換成中國話就是面向切面程式設計,聽師姐講過一次,前幾天總結SSH的時候,其中的spring的核心技術就是AOP和IOC,今天就做一個關於AOP的簡單小DEMO~,真的是簡單到不能再簡單啦~~
AOP的哲學
最近總結什麼都喜歡用哲學這個詞,軟體開發其實是非常具有藝術性的工作,資料就是我們的“樂高”,如何將“樂高”完美的組織到一塊,讓程式易於擴充套件,應用靈活就要靠程式設計師高超的技藝了,每個程式設計師都有自己的程式設計哲學,而一些神人總結出來的經驗就成為了這個行業的哲學,所以我不喜歡“碼農”這個詞,因為我覺得程式設計師是這個世界上最有意思的行業,我們玩的不是具體的東西,而是一個個的資料,通過幾行命令幾行程式碼,就可以指揮千萬條資料乖乖聽話,所以說,我們是虛擬世界的創造者,我們是藝術家~
AOP和OOP有什麼區別呢??面向物件程式設計是讓把世界拆成一個個具體的物件,我們在將物件抽象成不同的類別,讓這些類之間產生聯絡,從而完成邏輯功能。重點放在實體的屬性和行為的抽象封裝上,我們的關注點從設計之初就聚焦到了一個個的名詞實體上,業務邏輯中有哪些實體?如何將他們的行為屬性封裝到一起是OOP需要做的
而AOP面向切面程式設計則是將業務邏輯中的一個切面提取出來,他所面對的是業務邏輯中某個具體的步驟或者階段,而這個過程是涉及到了很多類的,這些散落在不同類中的相同步驟就構成了一個切面,我們將這個切面抽離出來,只關注這個切面,就是AOP的思想。
AOP的好處,達到了程式碼的可重用,一旦涉及到需求的改變,我們只需要在切面中做修改,不用去打開個各類再去意義的修改,這樣修改了基礎程式碼,就可以影響和他關聯的成千上百處的程式碼~多好!
所以總結來說兩者是相輔相成的關係,互相補充和完善~~
AOP使用場景
當我們需要為分散的物件引入公共行為的時候,OOP就歇菜了吧,這個時候就會用到AOP,例如日誌功能啦,各種許可權驗證啦,事務控制啦按and so on.
程式設計師也有無力的時候,當我們洋洋灑灑的寫了上千行程式碼,每個模組中都包括了:日誌+許可權,到了尾聲,需求變更,需要在許可權控制上進行大的變更,這個時候就需要重新去“千千萬萬”個方法中修改,不敢想象啊,倘若我們在初始的時候將這個切面抽離出來,放置到某個地方統一管理,這樣程式設計師只需要將關注點放到核心程式碼上,即提高了效率,又使程式碼變得整潔。日後的維護工作更是非常輕鬆,因為公共的程式碼的核心的程式碼已經分別存放了。
關於AOP的概念
方面(Aspect):一個關注點的模組化,這個關注點實現可能另外橫切多個物件。
連線點(Joinpoint):程式執行過程中明確的點,如方法的呼叫或特定的異常被丟擲
通知(Advice):在特定的連線點,AOP框架執行的動作。各種型別的通知包括“around”、“before”和“throws”
切入點(Pointcut):制定一個通知被引發的一些列連線點的集合。AOP框架必須允許開發者執行切入點
引入(Introduction):新增方法或欄位被通知的類。
目標物件(Target Object):包含連線點的物件,也被稱作通知或代理物件
AOP代理(AOP Proxy):AOP框架建立的物件,包含通知
編織(Weaving):組裝方面來建立一個被通知物件。
寫在後邊
這一篇主要是介紹了AOP的哲學思想,還要一些基礎的概念,算是巨集觀把控吧,下一篇會介紹一個小例子,幫助大家理解~