首頁  >  文章  >  Java  >  詳解用Aspect實作方法出入口日誌記錄的經驗分享

詳解用Aspect實作方法出入口日誌記錄的經驗分享

巴扎黑
巴扎黑原創
2017-07-18 15:14:172283瀏覽
@Aspect
public class Aspect
{

    @Before("execution(* com.test.*.*(..))")
    public void logBefore(JoinPoint joinPoint)
    {
        logEnter.....
    }

    @After("execution(* com.test.*.*(..))")
    public void logAfter(JoinPoint joinPoint)
    {
         logExit.....
    }
}

Spring config:

<aop:aspectj-autoproxy/>
    
<bean id="aspect" class="com.test.Aspect"></bean>

#  最近開發了一個項目,由於專案在整個開發過程中處於趕時間狀態(每個專案都差不多如此)所以專案在收尾階段發現缺少記錄系統日誌功能,以前系統都是直接寫在每個模組的程式碼中,然後存入表單,在頁面可以查看部分日誌。這個系統並沒有此要求,因此便想到了做一個系統通用的日誌記錄,主要記錄資料有:操作時間、操作對象、操作方法、操作的一些參數以及操作結果。剛開始直接想到的是利用aspect實作aop記錄日誌,但實際應用中發現aspect並不能友善的攔截action,而是主要用作攔截service層業務。由於系統框架是基於ssh框架的,所以最終考慮使用struts2的自帶攔截器Interceptor。

什麼攔截器?

  攔截器是動態攔截Action呼叫的物件。它提供了一個機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。談到攔截器,還有一個字大家應該知道-攔截器鏈(Interceptor Chain,在Struts 2中稱為攔截器棧Interceptor Stack)。攔截器鏈就是將攔截器依一定的順序聯結成一條鏈。在存取被攔截的方法或欄位時,攔截器鏈中的攔截器就會依其先前定義的順序被呼叫。

 攔截器的原理和大致流程

 

   1.ActionInvocation初始化時,根據配置,載入Action相關的所有Interc eptor。

 

   2. 透過ActionInvocation.invoke方法呼叫Action實作時,執行Interceptor。

 

    Interceptor將許多功能從我們的Action中獨立出來,大量減少了我們Action的程式碼,獨立出來的行為具有很好的重複使用性。 XWork、WebWork的許多功能都是有Interceptor實現,可以在設定檔中組裝Action用到的Interceptor,它會依照你指定的順序,在Action執行前後執行。

 

以上是詳解用Aspect實作方法出入口日誌記錄的經驗分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn