天天看點

利用SpringAOP 實作 日志輸出

目的:

  需要對一些事物的操作進行日志記錄,如果在service内進行記錄,大量的代碼重複,并且維護比較麻煩。是以采用AOP的方式對service進行攔截。使用自定義注解的目的則是判斷是否需要記錄日志和傳遞額外的資訊。

方式:

  參考後面的參考部落格

1、首先建立自定義注解

  @interface 自定義注解:用來标記是否需要記錄日志

  @Target 注解:用于描述注解的範圍,比如需要注解在方法上,值為 METHOD,其他含義如下

      CONSTRUCTOR 描述構造器

      FILED 描述域

      LOCAL_VARIABLE 描述局部變量

      METHOD 描述方法

      PACKAGE 使用者描述參數

      TYPE 用于描述類和接口

  @Retention :描述注解的生命周期,可取值:

      SOURCCE 在源檔案中有效

      CLASS 在class 檔案中有效

      RUNTIME 在運作時有效

  @Documented 在預設的情況下javadoc 指令不會将我們的注解生成載入到doc中,使用此,則告訴jdk讓此注解生成到doc中去

  @Inherited 可繼承的,比如子類繼承父類的注解

package com.bkc.logging.annotaion;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LogWrite
{
    /**
     * @param子產品名字
     */
    String modelName() default "";
    
    /**
     * @param操作類型
     */
    String option();
}      

  

2、利用AOP 方式攔截

  配置AOP,這裡采用注解方式

  使用通知,這裡采用@Around 環繞通知,因為需要記錄該方法是否被執行成功了

  實作@Around 方法中,記錄日志:擷取攔截的方法,判斷該方法是否含有自定義注解,如果沒有則不進行記錄,否則,按照自己的方式進行記錄。

參考部落格:Spring+SpringMVC+Mybatis 利用AOP自定義注解實作可配置日志快照記錄