AOP理解 模擬帶有橫切邏輯的例項

2021-09-30 14:19:24 字數 2916 閱讀 2920

spring使用動態**技術在執行期間織入增強的**。spring aop 使用兩種動態**機制:一種是基於jdk的動態**;另一種是基於cglib的動態**。之所以需要兩種**機制,很大程度上是因為jdk本身只提供介面的**,而不支援類的**。

package 

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();}}

上面帶綠色的**就是具有橫切邏輯的**,每個dao的實現前後都要執行先後的**,也就是相同的邏輯。

上面的performancemonitor是效能監視的類,我們給出乙個非常簡單的實現版本,期待嗎如下:

package com.hegx.spring.aop;

/***

@author:

hegx

*@description:

*@date:

14:33 2017/7/16

*/public class performancemonitor

//啟動對某乙個方法的效能監視

public static void

end()

}

threadloacl是將非執行緒安全類改造成執行緒安全類的法寶。performancemonitor提供兩個方法:通過呼叫begin(string method)方法開始對目標類方法的監視,method是目標類全限定名;而end()方法結束對目標類方法效能監視,並給出效能監視資訊。這兩個方法必須配套使用。

用於記錄效能類的資訊methodperformance類的**如下:

package com.hegx.spring.aop;

/***

@author:

hegx

*@description:

用於記錄效能監視資訊的類

*@date:

14:36 2017/7/16

*/public class methodperformance

public void

printperformance()

}

通過下面的**測試效能監視能力的forumserviceimpl業務方法:

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翻譯成...