欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring AOP日志框架實現(xiàn)過程圖解

 更新時間:2020年09月30日 15:04:17   作者:kinglead  
這篇文章主要介紹了Spring AOP日志框架實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

AOP日志框架實現(xiàn)

JDK動態(tài)代理實現(xiàn)日志框架

首先,在項目包com.ay.test 下創(chuàng)建業(yè)務(wù)接口類BusinessClassService,具體代碼如下:

BusinessC lassService 業(yè)務(wù)接口類可以理解為日常開發(fā)業(yè)務(wù)創(chuàng)建的接口類, 接口中有一個簡 單的方法doSomeThing 。然后,開發(fā)業(yè)務(wù)類的實現(xiàn)類BusinessClassServiceImpl,具體代碼如下:

實現(xiàn)類BusinessClassServicelmpl 實現(xiàn)了BusinessClassServ ice 接口, 并實現(xiàn)了doSomeThing 方法,在方法中打印“ do something ......” 。接著,開發(fā)日志接口類My Logger , 具體代碼如下:

• savelntoMethodTime : 記錄進入方法的時間。 • saveOutMethodTime : 記錄退出方法的時間。 接口類MyLogger 開發(fā)完成之后,用MyLoggerlmpl 類實現(xiàn)它, 具體代碼如下:

MyLoggerlmpl 類實現(xiàn)接口MyLogger , 并實現(xiàn)savelntoMethodTime 和saveOutMethodTime 方法,在方法內(nèi)部打印進入/退出方法的時間。 最后, 實現(xiàn)最重要的類MyLoggerHandler , 具體代碼如下:

• lnvocationHandler : 該接口中僅定義了一個方法: public Object invoke(Object obj, Method method, Object[] args) , 在使用時,第一個參數(shù)obj 一般是指代理類, method是 被代理的方法, args為該方法的參數(shù)數(shù)組。這個抽象方法在代理類中動態(tài)實現(xiàn)。 所有的代碼開發(fā)完成之后,開發(fā)測試類MyLoggerTest 進行測試, 具體代碼如下:

• Proxy . newProxylnstance :該類即為動態(tài)代理類, static Object newProxylnstance (ClassLoader loader, Class[] interfaces, JnvocationHandler h),返回代理類的一個實例,返 回后的代理類可以當(dāng)作被代理類使用。在Proxy.new Proxy Instance方法中,共有以下三 個參數(shù): • Classloader loader: targetObject.getClass().getClassLoader()目標(biāo)對象通過getClass 方法獲取類的所有信息后,調(diào)用getClassLoader()方法來獲取類加載器。獲取類力口載 器后,可以通過這個類型的加載器,在程序運行時,將生成的代理類力口載到JVM即 Java虛擬機中,以使運行時需要。 •Class[] interfaces: targetObject.getClass().getinterfaces()獲取被代理類的所有接口信 息,以便于生成的代理類可以具有代理類接口中的所有方法。 • lnvocationHandler h : 使用動態(tài)代理是為了更好地擴展, 比如在方法之前做什么操 作,之后做什么操作,這個時候這些公共的操作可以統(tǒng)一交給代理類去做。此時需 要調(diào)用實現(xiàn)了InvocationHandler 類的一個回調(diào)方法。

運行測試類的ma in 方法,便可以在Intellij IDEA 控制臺查看打印信息,具體信息如下:

以上就是利用動態(tài)代理模式實現(xiàn)簡單的日志框架, 具體的結(jié)構(gòu)如圖

這里總結(jié)一下JDK 動態(tài)代理的一般實現(xiàn)步驟:

( l )創(chuàng)建一個實現(xiàn)InvocationHandler 接口的類MyLoggerHandler,它必須實現(xiàn)invoke 方法。

(2 )創(chuàng)建被代理的類BusinessClassService 以及接口BusinessClassServicelmpl 。

(3 )調(diào)用Proxy 的靜態(tài)方法newProxyInstance ,創(chuàng)建一個代理類。

( 4 )通過代理類調(diào)用方法。

spring aop實現(xiàn)日志框架

使用Spring AOP 的注解方式實現(xiàn)日志框架是非常簡單的。首先,在配置文件 spring-mvc且nl 中添加配置, 具體代碼如下:

<aop:aspectj-autoproxy proxy-target-class="true">

</aop:aspectj-autoproxy>: 聲明自動為Spring容器中那些配置@aspectJ切面的bean創(chuàng)建 代理,織入切面。<aop : aspectj -autoproxy />有一個proxy-target-class屬性,默認為fal se, 表示使用JDK動態(tài)代理織入增強,當(dāng)配置poxy-target-class 為true 時,表示使用CGLib動 態(tài)代理技術(shù)織入增強。不過即使設(shè)置proxy-target-class 為fa lse ,如果目標(biāo)類沒有聲明接 口,則Spring將自動使用CGLib動態(tài)代理。

配置添加完成之后,要定義一個切面Loglnterceptor ,具體代碼如下:

• @Aspect : 標(biāo)識Loglntercepto r類為一個切面,供容器讀?。?• @Before : 在所攔截方法執(zhí)行之前執(zhí)行before 方法。 • @After:在所攔截方法執(zhí)行之后執(zhí)行after方法。 • @Around :可以同時在所攔截方法的前后執(zhí)行一段邏輯。 • execution 切入點指示符: 表示在controller 包中定義的任意方法 的執(zhí)行。execution 切入點指示符執(zhí)行表達式的格式如下:

翻譯為:

其中黑色字體部分不能省略,各部分都支持通配符“*”來匹配全部。比較特殊的為形參 表部分,其支持以下兩種通配符:

例如:

下面舉一些execution 的使用實例,具體內(nèi)容見表3 -3 。

切面類Loglnterceptor 開發(fā)完成之后, 重新啟動springmvc-mybatis-book 項目,項目成功啟 動后,在瀏覽器輸入網(wǎng)址: http: //localbost: 8080/user/findAll , 便可以在lntellij IDEA 開發(fā)工具的 控制臺看到如下的打印信息:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • k8s解決java服務(wù)下載超時問題小結(jié)

    k8s解決java服務(wù)下載超時問題小結(jié)

    我們在走ingress的java程序的時候,往往會有導(dǎo)出數(shù)據(jù)的功能,這個時候就會有因網(wǎng)絡(luò)慢、后臺處理時間過長導(dǎo)致下載超時,也有因下載文件太大,導(dǎo)致下載失敗,下面給分享k8s解決java服務(wù)下載超時問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Java 高精度的大數(shù)字運算方式

    Java 高精度的大數(shù)字運算方式

    這篇文章主要介紹了Java 高精度的大數(shù)字運算方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • spring boot使用i18n時properties文件中文亂碼問題的解決方法

    spring boot使用i18n時properties文件中文亂碼問題的解決方法

    這篇文章主要介紹了spring boot使用i18n時properties文件中文亂碼問題的解決方法,需要的朋友可以參考下
    2017-11-11
  • SpringMVC對自定義controller入?yún)㈩A(yù)處理方式

    SpringMVC對自定義controller入?yún)㈩A(yù)處理方式

    這篇文章主要介紹了SpringMVC對自定義controller入?yún)㈩A(yù)處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java httpcomponents發(fā)送get post請求代碼實例

    Java httpcomponents發(fā)送get post請求代碼實例

    這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Jmeter環(huán)境搭建及安裝步驟

    Jmeter環(huán)境搭建及安裝步驟

    Jmeter是純Java開發(fā)的,能夠運行Java程序的系統(tǒng)一般都可以運行Jmeter,本文以windows下安裝步驟為例分步驟給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Java使用GZIP壓縮導(dǎo)致HTTP請求返回亂碼問題解決

    Java使用GZIP壓縮導(dǎo)致HTTP請求返回亂碼問題解決

    這篇文章主要為大家介紹了Java壓縮GZIP導(dǎo)致HTTP請求返回亂碼問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Java開源診斷工具Arthas使用方法詳解

    Java開源診斷工具Arthas使用方法詳解

    這篇文章主要介紹了Java開源診斷工具Arthas使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 詳解Java8中的lambda表達式、::符號和Optional類

    詳解Java8中的lambda表達式、::符號和Optional類

    這篇文章主要介紹了Java8中的lambda表達式、::符號和Optional類,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java中詳細解析Map接口

    Java中詳細解析Map接口

    這篇文章主要介紹了Java8 中 Map 接口的新方法,本文通過代碼實例給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論