使用AOP 註解實現記錄方法入參出參

2021-09-27 03:49:09 字數 1276 閱讀 3854

有時候我們希望記錄某些方法的入參出參,但是有的時候切面可能把所有符合條件的切面的入參出參都記錄了,沒有很多的必要,有些方法記錄入參出參沒有過大的意義,所以我們可以利用註解 + aop 實現針對註解方法的入參出參記錄

註解類: 

@target()

@retention(retentionpolicy.runtime)

@documented

@inherited

public @inte***ce logparam

aop 攔截類:

/**

*@description: 記錄入參出參方法

*@param:

*@date: 2019/9/16

*@return:

* **/

@component

@aspect

public class logparamaop

@around("@annotation(logparam)")

public object doaround(proceedingjoinpoint pjp, logparam logparam) catch (throwable e)

long endtime = system.currenttimemillis();

methodsignature signature = (methodsignature) pjp.getsignature();

string methodname = signature.getdeclaringtypename() + "." + signature.getname();

logger.info("logparamaop==doaround==" + "method [" + methodname + "] spend time: "+(endtime-starttime)+"ms, inparam:" +

jsonobject.tojsonstring(pjp.getargs()) + "===outparam:" + (obj != null ?obj.tostring():"null"));

return obj;

}}

上面**的 doaround 方法解釋, 針對註解了 logparam 的方法進行方法增強,執行完成之後, 使用 logger 記錄入參出參資訊(大家可以根據自己的情況儲存到資料庫等), 入參使用fastjson 轉化成json字串,我本來是使用 obj.tostring的,但是發現是沒辦法輸入物件字串的,所以轉化成json字串是最好的方法

使用註解實現AOP

xml標頭檔案中加入 xmlns context xsi schemalocation spring context.xsd 宣告哪些包下有註解 當有兩個以上的包時,用 隔開 在demo類中加入 component 在方法上新增 pointcut 定義切點 component public clas...

使用註解實現AOP

1.匯入jar包 與用介面實現 的jar包相同 2.配置 a.將業務類和通知類納入springioc容器 b.在容器中開啟註解對aop的支援 c.將類使用註解方式 component 放入ioc容器中時,要將該類所在的包新增到掃瞄器中 3.編寫通知類 1.加入註解 aspect,不用再實現介面 但是...

使用AOP實現快取註解

半年前寫了乙個註解驅動的快取,最近提交到了github。快取大量的被使用在應用中的多個地方,簡單的使用方式就是 先查詢快取中是否存在資料,如果不存在或者快取過期再查詢資料庫,並將查詢的結果快取一段時間,快取key通常是入參的物件或者入參物件的某些屬性,有些時候還需要按照某種條件判斷是否快取。可以看到...