需要使用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...