利用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自定义注解实现可配置日志快照记录

http://www.cnblogs.com/shipengzhi/articles/2716004.html (利用spring Aop 自定义注解解决日志和签名校验)

原文地址:https://www.cnblogs.com/panie2015/p/5893549.html