1,什麼是spring aop?
spring是框架,aop(aspect oriented programming)即面向切面程式設計,spring aop是spring框架中支援aop方式程式設計。
2,aop的來由
學程式的第一天多以寫個demo類開始,類中有寫乙個main() 方法,然後輸出」helloword!「 。當demo開始執行的時候,虛擬機器就(jvm)就會立刻為main方法建立乙個執行緒(主線程)。
在記憶體中,每個執行緒會被分配乙個儲存空間,即棧(stack),棧中記錄了程式的整個執行過程。棧的結構有點像糖葫蘆,最先存進來的資料就就像木枝上第乙個串上來的山楂果,放在最下層。取資料的時候也像,最上面的當葫蘆通常會最先被吃掉。山楂過堆疊組成了糖葫蘆,棧幀的堆疊組成了棧。每個棧幀都表示某個方法被呼叫了,呼叫資訊會被自動記錄下來。
這些記錄可以通過執行thread.dumpstack()方法建立乙個假的exception例項,然後將這個exception例項記錄的當前執行緒的內容輸出到標準錯誤流中。還有乙個簡單的方法,寫一段會丟擲異常的**,如執行緒的sleep()方法,故意不去捕獲異常,程式執行後便會在控制台列印出一連串的log資訊。這些資訊便是程式中的方法被呼叫的順序。
如果我們以時間為軸,來看方法的執行順序,那麼每個方法的呼叫都像糖葫蘆上的一顆山楂果,我們稱每次的方法呼叫為連線點(join point)。乙個程式的執行過程,便是乙個或多個連線點以時間為軸串聯的過程。
當我們覺得糖葫蘆太單調,想對某個糖葫蘆進行再加工,即直接對呼叫的方法進行一些修飾或限定的時候,便有了aop。
3.aop的程式設計思路和機制
aop將每個方法呼叫,即連線點作為程式設計入口,針對方法呼叫進行程式設計。相對於通常的以時間軸串聯連線點的編寫程式的方式來說,aop從縱向切面入手編寫程式。
由此可以看出針對方法呼叫的程式設計思路是aop的本質。
要針對方法呼叫進行程式設計,首先得通過方法匹配表示式匹配到相應連線點,方法匹配表示式稱為切入點(point cut)。然後aop得工作是對切入點進行處理,這一過程是通過**模式進行的。
**模式是指,為每乙個例項方法建立乙個**物件,通過引入**物件得方式擴充套件原物件得方法,並且使對原物件得操作權轉移給相應得**物件。aop控制著**物件,當我們呼叫某一例項物件得任何乙個非final得public方法時,spring框架便會知道,也可以做一些處理。
4.spring aop通常會幹點什麼呢?
aop ----> **物件(proxy角色)----> 例項物件(realsubject角色)
aop至少會做三件事:
1)在呼叫例項物件得方法之前需要做什麼?
2)呼叫例項物件得過程中如果丟擲異常該怎麼處理?
3)呼叫例項物件得方法後,返回了結果,該怎麼處理?
**物件也至少做三件事:
1)在呼叫例項物件得方法之前向aop詢問處理意見?
2)呼叫例項物件得過程中如果丟擲異常向aop詢問處理意見?
3)呼叫例項物件得方法後,返回了結果,aop詢問處理意見??
其實aop幹的活就是告訴**物件在呼叫例項物件方法得前、中、後期應該幹什麼。
springAOP學習筆記
今天看spring的aop,頭都看暈了 切面aspect,連線點joinpoint 切入點pointcut,proxy,通知advice,前置通知before advice 後置通知after advice,異常通知after throwing advice 最終通知 after finally a...
Spring Aop學習筆記
spring aop 1.選擇連線點 比如 1.jdk 連線點某個介面的imp方法 乙個介面roleservice有個方法printrole 有個該介面的實現類roleserviceimp呼叫方法printrole 設定該方法為連線點,在建立切面時定義 系統會為該imp類生成 物件,然後攔截prin...
springAOP學習筆記
springaop是面向切面程式設計,它一共有6個概念 joinpoint 連線點 所謂連線點是指那些被攔截到的點,在spring中這些點指的是方法,因為spring只支援方法型別的連線點 pointout 切入點 所謂切入點是指我們要對哪些joinpoint進行攔截的定義 advice通知 增強,...