乙個簡單版本。
在寫aop 實現日誌功能時,如果你對aop 一些內建屬性不清楚的,可結合此部落格:
**環境 ssm :
@entity
@table(name = "logtable")
@setter
@getter
public class logtable
@target()
@retention(retentionpolicy.runtime)
@documented
public @inte***ce log
引數解釋:
/**
* @author cc
* * @target()
* 作用:用於描述註解的使用範圍(即:被描述的註解可以用在什麼地方)
* * 取值(elementtype)有:
* * 1.constructor:用於描述構造器
* 2.field:用於描述域
* 3.local_variable:用於描述區域性變數
* 4.method:用於描述方法
* 5.package:用於描述包
* 6.parameter:用於描述引數
* 7.type:用於描述類、介面(包括註解型別) 或enum宣告
* * @retention(retentionpolicy.runtime) 解釋:@retention() 定義了該annotation(注釋)被保留的時間長短
* 取值(retentionpoicy)有:
* * 1.source:在原始檔中有效(即原始檔保留)
* 2.class:在class檔案中有效(即class保留)
* 3.runtime:在執行時有效(即執行時保留)
* ** 自定義註解: @inte***ce 自定義註解
* * 定義註解格式:
* public @inte***ce 註解名
* * 註解引數的可支援資料型別:
* * 1.所有基本資料型別(int,float,boolean,byte,double,char,long,short)
* 2.string型別
* 3.class型別
* 4.enum型別
* 5.annotation型別
* 6.以上所有型別的陣列
* * annotation(注釋)型別裡面的引數該怎麼設定:
* 第一,只能用public或缺省(default)這兩個訪問權修飾.例如,string value();這裡把方法設為defaul預設型別;
* 第二,引數成員只能用基本型別byte,short,char,int,long,float,double,boolean八種基本資料型別和 string,enum,class,annotations等資料型別,以及這一些型別的陣列.例如,string value();這裡的引數成員就為string;
* 第三,如果只有乙個引數成員,最好把引數名稱設為"value",後加小括號.例:下面的例子fruitname註解就只有乙個引數成員。
* * @data 2019/5/18 13:53
*/
/**
* @author cc
* @data 2019/4/23 16:59
*///定義切面
@aspect
@component
public class logaopaspect catch (classnotfoundexception e)
method methods = aclass.getmethods();
for (int i = 0; i < methods.length; i++)
class<?> clazzs = methods[i].getparametertypes();
if (clazzs.length == args.length)
}system.out.println("署名資訊的物件:"+signature);
system.out.println("目標方法所屬類的簡單類名:"+******name);
system.out.println("獲取傳入目標方法的引數物件:"+target);
system.out.println("**類:"+targetname);
system.out.println("方法名:"+methodname);
system.out.println("操作型別:"+operationtype);
system.out.println("操作解釋:"+operateexplain);
system.out.println("---------------------------開始儲存日誌----------------------------------");
******dateformat dateformat = new ******dateformat("yyyy-hh-dd hh:mm:ss");
string date = dateformat.format(new date());
logtable logtable1 = new logtable();
logtable1.setoperateclassname(targetname); //方法所在類名
logtable1.setoperatemethodname(methodname); //執行的方法
logtable1.setoperatetype(operationtype); //操作型別
logtable1.setoperateexplain(operateexplain); //操作說明
logtable1.setoperateuser("超級管理員"); //操作人
logtable1.setoperatedate(date); //執行的時間
logtable1.setoperateresult("");
logtable1.setremark("");
logtabledao.addlog(logtable1);
}catch (exception e)
} //異常通知
@afterthrowing(value = "execution( * cn.sys.controller.rwdaocontroller.delrwhist(..))",throwing = "e")
public void exceptionadvice(joinpoint joinpoint,throwable e)
system.out.println(params);
try catch (classnotfoundexception ee)
method methods = clazz.getmethods();
for (int i = 0; i < methods.length; i++)
class<?> parametertypes = methods[i].getparametertypes();
if (parametertypes.length == args.length)
}system.out.println("---------------------------開始儲存日誌----------------------------------");
******dateformat dateformat = new ******dateformat("yyyy-hh-dd hh:mm:ss");
string date = dateformat.format(new date());
logtable logtable1 = new logtable();
logtable1.setoperateclassname(targetname); //方法所在類名
logtable1.setoperatemethodname(methodname); //執行的方法
logtable1.setoperatetype(operationtype); //操作型別
logtable1.setoperateexplain(operateexplain); //操作說明
logtable1.setoperateuser("超級管理員"); //操作人
logtable1.setoperatedate(date); //執行的時間
logtable1.setoperateresult("刪除失敗,異常**"+e.getclass().getname() +"異常資訊:"+e.getmessage());
logtable1.setremark("");
logtabledao.addlog(logtable1);
}catch (exception ee)
}}
controller
public class rwdaocontroller catch (exception e)
return jsonobject.tojsonstring("刪除成功");
}}
注:
1.如果切入點的方法出現異常了,則不會走 環繞方法。
2.到此完成。
spring 註解實現aop
aspect表明這是乙個切面類 package com.kuang.diy author administrator description todo date 2021 11 26 13 46 import org.aspectj.lang.proceedingjoinpoint import o...
使用spring註解方式實現AOP 二
如果需要對業務方法中的引數和返回值做處理的情況下 package com.chris.aop import org.springframework.stereotype.service service testservice public class testservicebean public s...
spring 基於AOP模擬日誌列印
一 控制方法執行列印日誌 執行後列印日誌 讓指定方法列印日誌 1.指定方法列印日誌 1 在invoke 方法中加乙個對method名字的判斷,其中method的名字可以寫在xml檔案中。二 實現 1.ilogger public inte ce iloggerpublic class dlogger...