spring使用動態**技術在執行期間織入增強的**。spring aop 使用兩種動態**機制:一種是基於jdk的動態**;另一種是基於cglib的動態**。之所以需要兩種**機制,很大程度上是因為jdk本身只提供介面的**,而不支援類的**。
package上面帶綠色的**就是具有橫切邏輯的**,每個dao的實現前後都要執行先後的**,也就是相同的邏輯。com.hegx.spring.aop.service.impl
;import
com.hegx.spring.aop.forum
;import
com.hegx.spring.aop.performancemonitor
;import
com.hegx.spring.aop.dao.forumdao
;import
com.hegx.spring.aop.dao.impl.forumdaoimpl
;import
com.hegx.spring.aop.service.forumservice
;/**
*@author:
hegx
*@description:
*@date:
14:25 2017/7/16
*/public class
forumserviceimpl
implements
forumservice
catch
(interruptedexception e)
//結束對方法進行效能監視
performancemonitor.end();
}
@override
public void
create
(forum forum)
catch
(interruptedexception e)
//結束對方法進行效能監視
performancemonitor.end();}}
上面的performancemonitor是效能監視的類,我們給出乙個非常簡單的實現版本,期待嗎如下:
package com.hegx.spring.aop;threadloacl是將非執行緒安全類改造成執行緒安全類的法寶。performancemonitor提供兩個方法:通過呼叫begin(string method)方法開始對目標類方法的監視,method是目標類全限定名;而end()方法結束對目標類方法效能監視,並給出效能監視資訊。這兩個方法必須配套使用。/***
@author:
hegx
*@description:
*@date:
14:33 2017/7/16
*/public class performancemonitor
//啟動對某乙個方法的效能監視
public static void
end()
}
用於記錄效能類的資訊methodperformance類的**如下:
package com.hegx.spring.aop;通過下面的**測試效能監視能力的forumserviceimpl業務方法:/***
@author:
hegx
*@description:
用於記錄效能監視資訊的類
*@date:
14:36 2017/7/16
*/public class methodperformance
public void
printperformance()
}
package com.hegx.spring.aop.test;程式執行的結果:import com.hegx.spring.aop.forum;
import com.hegx.spring.aop.service.forumservice;
import com.hegx.spring.aop.service.impl.forumserviceimpl;
/***
@author:
hegx
*@description:
測試擁有效能監視能力的
testforumserviceimpl
業務方法
*@date:
15:10 2017/7/16
*/public class testforumservice
}
如上圖和**所示,當某個方法在進行效能監視,就必須調整方法的**,在方法體前後分別新增上開啟效能和結束效能監視的**,這些非業務邏輯的效能監視**破壞了forumserviceimpl業務邏輯的純碎性。我們希望通過**的方式,將業務類方法中開啟和結束效能的這些橫切**從業務類中完全移除。並通過jdk動態**技術或cglib動態**技術獎橫切**動態織入到目標方法的位置。
SpringAop 一 AOP橫切邏輯
aop 是面向切面程式設計,是在業務 中可以織入其他公共 效能監控等 現在用普通的方法實現aop 1 首先存在的肯定是業務類 package com.baobaotao.proxy 業務類 author administrator public class forumserviceimpl catc...
《記錄》AOP理解
oop時,記錄日誌的方式是將需要記錄日誌的地方去呼叫記錄一下日誌。這樣導致了記錄日誌的呼叫遍布全專案。這怎麼辦呢,有什麼辦法能夠將他們統一起來呢。首先要明確下思路,如何不讓整個專案到處都在呼叫記錄日誌呢,記錄日誌的方式就得是被動的形式,這樣子就能讓主體邏輯不用主動呼叫去記錄日誌,利用執行時生成 物件...
AOP概念理解
aop 的全稱是 aspect oriented programming 在網上很多地方都將 aop翻譯成 面向方面程式設計 我覺得這樣的翻譯不利於對aop概念的理解,在中文中,如果 方面 前面沒有修飾詞,方面 是乙個沒有意義的詞語。面向方面程式設計 那這個 方面 是什麼?我覺得將aspect翻譯成...