大家可能對面向對象的程式設計已經很熟悉了,目前面向對象的技術已經很流行。其得到了很多開發者的認同。比起以前的面向過程,簡直是一種質的飛躍。既然有面向對象的程式設計的模式了,為什麼還要面向切面的思想呢?
面向對象的程式設計主要注重核心業務,而面向切面程式設計主要關注一些不是核心的業務,但又是必須的輔助功能,比如一個完整的系統中,記錄平時系統運作時抛出的異常,需要我們去記錄,以便我們對系統盡快的修複。這就是我們常用的日志。如果對一些要求比較重要的資料操作,事務是不可少的,如金融系統,這樣的資料很重要,每步操作都很重要,我們就應該用到事務處理。這就是我們常用的事務處理。可根據你的系統資料的重要性,有選擇的應用。還用一個常用的就是安全驗證了,它也是常用的,對于不同的頁面,通路的身份也不一樣。這就是我們常用的身份驗證。對于我們系統部分頁面或子產品的通路量比較大的地方,我們可以使用緩存的機制來對付這些通路比較頻繁的頁面,以彌補性能上的不住,保證性能不受影響,這就要用到緩存機制了。以上這些不是針對特定那個業務子產品的,可能針對所有的子產品。它們隻是一些附加的功能,相對子產品的主功能而言。如果在每個子產品中都夾雜着這些不是核心業務的代碼,看起來與核心業務有點關系,但這樣處理,會對以後的維護比較頭疼。同時也違背了面向對象的一條原則,自己對自己負責。本不屬于這個方法的業務也放在了其中。這樣的代碼不僅難維護,重用性也不好,耦合度也比較大。内聚性也比較低。這樣的代碼眼前可能不會有什麼麻煩,但給後期的維護人員帶來了麻煩。
面向方面的程式設計主要是輔助核心業務的,它并不是核心業務,但它又是不可缺少的。我們可以這樣了解它與面向對象思想的聯合使用。其實面向方面程式設計就是把那些夾雜在核心業務方法裡面的代碼抽取出來并子產品化,把它們單獨看成一個子產品功能.來與核心業務共同完成比較完善的功能.
面向方面程式設計( Aspect-Oriented Programming,AOP)很早就出現了,它與spring的Ioc結合使用,更加展現了aop的強大功能所在.在講它與spring結合使用之前先說幾個難聽,難懂的概念.它為什麼不命名一些容易了解的概念了,因為aop很早就有人對它們命名了, 是以spring中講的aop也不例外.在jboss,AspectJ...中都有aop這個概念.概念都一樣的.看你怎樣了解和運用了.我們簡單的講一下常用的幾個概念.
第一個: 切面(Aspect),這是中文的翻譯,你可以把它翻譯成方面,一部分...關于它的翻譯太多,我們不關注這些,我們知道了解它是核心功能就OK了.切面簡單的了解就是把那些不是核心業務應該處理的代碼提取出來,進行封裝成子產品化.來處理那些附加的功能代碼.(如日志,事務,安全驗證)我們把這個子產品的作用了解為一個切面,告訴我們它是一個功能子產品.我們可以把它看成一個切面.說白了就是我們寫一個類,在這個類中寫一些處理在核心業務中起到同樣效果的方法.這樣大家應該明白了吧.專業的概念就是那麼難了解.
第二個:連接配接點(Joinpoint),簡單的了解就是在切面子產品中定義的方法.就是上面定義類中的方法.
第三個:切入點(Pointcut).就是連接配接點的集合,就是一組方法的集合了.
第四個:通知(Advice).簡單的了解就是告訴一個方法什麼時間觸發執行.把它看作一個條件判斷.判斷這個方法何時執行.
以下幾個就比較了解了,目标對象就是要處理的核心業務了.代理就更容易了解了,讓一個代理去完成這個任務.
今天先簡單的寫到這,以後在寫.
本文轉自 weijie@java 51CTO部落格,原文連結:http://blog.51cto.com/weijie/66471,如需轉載請自行聯系原作者