aop:指程式執行期間動態的將某段**切入到指定方法指定位置進行執行的程式設計方式。
基於註解的aop 實現步驟:
1、匯入aop模組;spring aop:(spring-aspects)
2、定義乙個業務邏輯類(userserviceimpl);在業務邏輯執行的時候將日誌進行列印包括在(方法執行的之前,執行結束,執行異常等)
3、定義乙個日誌切面類(logaspect):切面類裡面的方法需要動態感知userserviceimpl執行到**然後執行;
通知方法:
前置通知(``@before``):logstart:在目標方法執行之前執行
後置通知(``@after``):logend:在目標方法執行結束之後執行(無論方法正常結束還是異常結束)
返回通知(``@afterreturning``):logreturn:在目標方法正常返回之後執行
異常通知(``@afterthrowing``):logexception:在目標方法出現異常以後執行
環繞通知(``@around``):動態**,手動推進目標方法執行。
4、給切面類的目標方法標註何時何地執行(通知註解);
5、將切面類和業務邏輯類(目標方法所在類)都加入到容器中;
6、必須告訴spring哪個類是切面類(@aspect)
7、給配置類中加 @enableaspectjautoproxy
aop 的註解**實現:
匯入spring-aspects的jar包:
org.springframework
spring-aspects
5.2.1.release
業務類(userserviceimpl)
public class userserviceimpl
}
在定義切面之前我們說一下aspectj切入點語法定義在我們使用spring框架配置aop的時候,不管是通過xml配置檔案還是註解的方式都需要定義切入點(pointcut)。
例如定義切入點表示式 execution ( zfcoding.service..*.*(..))*
execution()是最常用的切點函式,其語法如下所示:
整個表示式可以分為五個部分:
切面類(logaspect)
@aspect
public class logaspect
@before("pointcut()")
public void logstart()
@after("pointcut()")
public void logend()
@afterreturning("pointcut()")
public void logreturn()
@afterthrowing("pointcut()")
public void logexception()
}
將業務類和切面類注入到spring容器當中,使用@enableaspectjautoproxy開啟註解的aop 功能
@configuration //配置類
@enableaspectjautoproxy //開啟註解的aop 功能
public class myconfigaspect
@bean
public logaspect logaspect()
}
測試類:
public class aspecttest
}
執行結果:
登入開始通知
使用者登入成功~~~~~~~
登入結束通知
返回通知
註解實現aop 小結
基於xml的aop 的實現步驟
首先需要也是需要定義乙個業務類和乙個配置類,然後定義乙個配置類,配置類實現的功能主要是將業務類和切面類注入到spring容器當中,定義一些切面的配置。
基於xml的aop **實現:
業務類和上面註解實現一樣,同上
切面類
public class logaspectxml
public void logend()
public void logreturn()
public void logexception()
}
配置類:
<?xml version="1.0" encoding="utf-8"?>
測試類
public class aspecttestxml
}
執行結果
登入開始通知xml 實現aop 小結使用者登入成功~~~~~~~
登入結束通知
返回通知
springAOP 註解方式
package com.zf.aspect import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annotation.afterreturning ...
springAop的配置註解方式實現
前面一篇是xml實現的,現在用註解方式實現一下,測試類還是原來的,xml的配置中多餘的部分這裡就不在貼出來了。xml version 1.0 encoding utf 8 beans xmlns xmlns context xmlns xsi xmlns aop xsi schemalocation...
SpringAop註解實現
該簡單例子實現方法的前置增強列印日誌,簡單的來說就是在呼叫某個方法之前會呼叫另乙個方法 普通類 calculator component public class calculator public int sub int i,int j public int mul int i,int j pub...