使用AOP記錄後台刪除更新操作

2021-10-06 11:43:27 字數 2919 閱讀 9574

需要使用aop記錄下後台刪除更新操作,並存到資料庫中作為備份,在記錄更新操作的時候需要詳細記錄下哪個字段發生變化

1、使用spring aop思想,並將切面設定為自定義註解,更具有靈活性。

2、在記錄更新操作時,需要獲取更新前引數,考慮到因為通用性,可以在自定義註解裡面新增引數,記錄通過id查詢的方法名id位於第幾個引數中更新id的名字是什麼將引數轉為jsonstring後id如果有多個,位於第幾個

3、比較引數發生變化的時候就呼叫之前部落格寫的比較方法,即可得到

//在切面中需要通過class建立物件

//如果使用 class.newinstance ,則建立出來的物件裡面包含的物件不會自動注入,預設為null

//在springboot專案中通過class建立物件

@autowired

getbean

(aclass)

;

@slf4j

@aspect

@configuration

public

class

logaspect

@around

("aspectlog()"

)public object doafterreturning

(proceedingjoinpoint joinpoint)

throws throwable

mongolog.

setafterupdate

(afterupdatestring)

; log.

info

("更新之後引數(請求引數):{}"

, afterupdatestring)

;//獲取ip位址

string address =

getlocalhost()

.gethostaddress()

;//獲取時間

string date =

new******dateformat

("yyyy-mm-dd hh:mm:ss").

format

(new

date()

);string message = null;

tryelse

return proceed;

}catch

(throwable throwable)

finally

}private

void

comparedifferent

(proceedingjoinpoint joinpoint, logannotation logannotation, object afterupdateobject, mongolog mongolog)

throws nosuchmethodexception, invocationtargetexception, illegalacces***ception

if(num == logannotation.

idnum()

)else

break;}

}if(updateid != null && stringutils.

isnoneempty

(updateid))"

, updateid)

; object beforeupdateobject =

((result) method1.

invoke

(o, updateid)).

getdata()

; mongolog.

setbeforeupdate

(json.

tojsonstring

(beforeupdateobject));

log.

info

("更新之前引數:{}"

, json.

tojsonstring

(beforeupdateobject));

string diff = reflectutils.

comparediff

(afterupdateobject, beforeupdateobject)

; mongolog.

setdiffupdate

(diff)

; log.

info

("更新引數 = "

+ diff);}

}/**

* 獲取方法引數

*/public

static list

getmethodargs

(joinpoint joinpoint)

return arrays.

stream

(args)

.filter

(arg -

>

!(arg instanceof

model)&&

!(arg instanceof

modelmap)&&

!(arg instanceof

beanpropertybindingresult)&&

!(arg instanceof

multipartfile))

.collect

(collectors.

tolist()

);}}

@target

(elementtype.method)

@retention

(retentionpolicy.runtime)

public @inte***ce

logannotation

spring使用AOP做實現操作記錄的功能

首先定義乙個註解 target retention retentionpolicy.runtime documented inherited public inte ce logannotation 寫乙個aop類 該註解標示該類為切面類 aspect 注入依賴 component public c...

JavaLib 使用AOP幫你記錄日誌

這一次,我們乾脆點,直接進入正題。使用這個模組,你必要加入的包依賴 你需要告訴我,你的切入點 繼承lbaseweblogaspect,並實現pointcut 方法,配置你的切入點 寫乙個介面進行測試,我們還是使用上一次的切口吧 完整 我們放大點,看得仔細 日誌主要記錄以下資訊 請求客戶端ip 請求u...

SQL 插入 更新 刪除記錄語句

無需指定要插入資料的列名,只需提供被插入的值即可 insert into table name values value1,value2,value3,需要制定列名和插入的值 insert into table name column1,column2,column3,values value1,v...