1. 程式人生 > >淺談AOP(一)

淺談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的哲學思想,還要一些基礎的概念,算是巨集觀把控吧,下一篇會介紹一個小例子,幫助大家理解~