aop並不是spring的東西,spring整合了aop的功能,aop是種概念,好比oop,同oop相比,差別當然就是乙個是a乙個是o.....:>>。
這裡o比較熟悉就是object表示物件的意思,oop的核心是物件,同樣對於aop來說這裡a代表aspect,也就是aop的中心是aspect,aspect通常稱作「切面」,個人還是喜歡叫做「方面」。
aop其實是從另乙個角度來思考程式設計結構,它的角度是這樣的,我們有時候會有要干預某些物件的某些特殊動作的需求,但是我們不希望去修改物件,因為一方面我們的這種需求涉及的物件多種多樣,另一方面我們還是想希望保持物件的彈性,當我們所做的干預發生調整的時候不需要改動太多的東西(不需要改動物件,只需要改動我們干預的那些東西)。
比如這樣乙個例子,對於一些交通工具比如汽車、電動車,我們希望他們在出發前能夠把時間告訴我們,在他們到達地點後也把地點告訴我們,這裡假設汽車、電動車都是物件,而出發和到達作為物件的兩個方法。我們沒有辦法讓汽車或者電動車回到工廠裡重新改造新增相應的功能(重新修改**,增加介面,然後重新編譯),當然也沒有這個必要,工廠也不接這個活。於是我們可以自己在出發和停止(比如說出發就認為是轉動鑰匙到on位置,而停止就是到off位置)這兩個我們關心的點上加上一些自己的裝置,比如出發動作一結束(鑰匙撥過去了)那麼我們就自己啟動個裝置把時間記錄下來,停止也類似。所以這個例子看到我們只關心物件的兩個方法,其他的我們不關心,這種就叫做我們關心的「方面」(aspect)。
所以我們看到aop的靈活性很大,它是種可以在執行時加入的東西(類不需要重新修改、編譯),當然比如汽車是類a,加了記錄時間裝置的汽車是類b,這裡會多出乙個類來,這個類b通常叫做proxy,proxy叫做**,它的意思也就是說b**了a的功能,應用程式通過同b溝通實現又能記錄時間又同時能停止和啟動汽車的功能。aop可以對多個類的多種動作進行「同時」關心,對不同的方法執行類似的動作,這種執行動作上面的例子是記錄時間,在aop裡面這個所執行的動作叫做advice(建議,也就是對所關心的方法採取的意見),另外乙個術語就是針對aop所關心的類方法(也可以是類成員、介面什麼的)叫做join point;其實這裡上面為了好理解自己直接認為join point就是個函式,其實概念上join point是指程式執行中的某個點。還有個術語叫point cut,這個就是表示能夠cut到對應point的說明語句(就是能夠匹配到相應join point的意思),這裡主要是匹配我們感興趣的函式,point cut一般是個正規表示式,比如我們習慣對查詢資料庫的函式寫作query.....(),那麼query*這個point cut就代表了所有的這些函式(也就是所有的join point),你如果希望在所有的query字首的函式執行之前做些操作的話,你發現用aop一下子就可以實現了(後面我們通過例子來看是如何做的)。
所以注意到aop它是中對程式結構的另一方面出發的,一般如果類越是」粗糙「,aop發揮的餘地和作用將會更大,如果類太」精細「了,可能aop也沒有必要了。這主要根據實際的應用。實際中相關應用還是蠻多的,比如你希望某個介面只允許某個使用者訪問,當然我們不可能在介面裡面判斷使用者,這種做法不符合oop,這裡可以通過aop,在這個介面呼叫前加入advice,如果不是允許的使用者,直接exception掉,好比在同介面通訊間加了個防火牆一樣,當然如果不要直接可以不去指定aspect,所以在系統整合方面也是能有很大的幫助的。
SpringAop 一 AOP橫切邏輯
aop 是面向切面程式設計,是在業務 中可以織入其他公共 效能監控等 現在用普通的方法實現aop 1 首先存在的肯定是業務類 package com.baobaotao.proxy 業務類 author administrator public class forumserviceimpl catc...
細說Spring AOP詳解(AOP概覽)
一 對aop的初印象 在軟體業,aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方 式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,是軟體開發中的乙個 熱點,也是spring框架中的乙個重要內容,是函式式程式設計的一種衍...
細說Spring AOP詳解(AOP概覽)
在軟體業,aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方 式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,是軟體開發中的乙個 熱點,也是spring框架中的乙個重要內容,是函式式程式設計的一種衍生范型。利用aop可以...