使用Spring AOP怎么实现统一注解功能

  介绍

本篇文章为大家展示了使用Spring AOP怎么实现统一注解功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> 1。概述

在一般系统中,当我们做了一些重要的操作时,如登陆系统,添加用户,删除用户等操作时,我们需要将这些行为持久化。本文我们通过Spring AOP和Java的自定义注解来实现日志的插入。此方案对原有业务入侵较低,实现较灵活

<强> 2。日志的相关类定义

我们将日志抽象为以下两个类:功能模块和操作类型

使用枚举类定义功能模块类型ModuleType,如学生,用户模块

public  enum  ModuleType  {   默认的才能(“1“),,//,默认值   学生才能(“2“),//,学生模块   老师才能(“3“);,//,用户模块   private 才能;ModuleType (String 指数){   ,,,this.module =,指数;   ,,}   private 才能;String 模块;   public 才能;String  getModule () {   ,,,return  this.module;   ,,}   }

使用枚举类定义操作的类型:EventType。如登陆,添加,删除,更新,删除等

public  enum  EventType  {   默认的才能(“1”,,,“default"),,添加(“2“,,“add"),,更新(“3“,“update"),, DELETE_SINGLE (“4“,,“delete-single"),   登录才能(“10“,“login"), LOGIN_OUT (“11”,“login_out");      private 才能EventType (String 指数,String 名称){   ,,,this.name =,名称;   ,,,this.event =,指数;   ,,}   private 才能String 事件;   private 才能;String 名称;   public 才能;String  getEvent () {   ,,,return  this.event;   ,,}      public 才能;String  getName (), {   ,,,return 名称;   ,,}   }

<强> 3。定义日志相关的注解

<强> 3.1。@LogEnable

这里我们定义日志的开关量,类上只有这个值为true,这个类中日志功能才开启

@Documented   @Retention (RetentionPolicy.RUNTIME)   @Target ({ElementType.TYPE})   public  @interface  LogEnable  {   ,/* *   ,,*,如果为真,则类下面LogEvent启的作用,否则忽略   ,,* @return   ,,*/boolean 才能;logEnable (), default 真实;   }

<强> 3.2。@LogEvent

这里定义日志的详细内容。如果此注解注解在类上,则这个参数做为类全部方法的默认值。如果注解在方法上,则只对这个方法启作用

@Documented   @Retention (RetentionPolicy.RUNTIME)   @Target ({java.lang.annotation.ElementType.METHOD, ElementType.TYPE})   public  @interface  LogEvent  {   ModuleType 才能;模块(),default  ModuleType.DEFAULT;,//,日志所属的模块   EventType 才能;事件(),default  EventType.DEFAULT;,//,日志事件类型   String 才能;desc (), default ““,//,描述信息   }

<强> 3.3。@LogKey

此注解如果注解在方法上,则整个方法的参数以json的格式保存到日志中。如果此注解同时注解在方法和类上,则方法上的注解会覆盖类上的值。

@Target ({ElementType.FIELD, ElementType.PARAMETER})   @Retention (RetentionPolicy.RUNTIME)   @Documented   public  @interface  LogKey  {   ,,String  keyName (), default ““,//,关键的名称   ,,boolean  isUserId (), default 假,,//,此字段是否是本次操作的userId,这里略   ,,boolean  isLog (), default 真的,,//,是否加入到日志中   }

<>强4。定义日志处理类

<强> 4.1。LogAdmModel

定义保存日志信息的类

public  class  LogAdmModel  {   private 才能Long  id;   private 才能String  userId,//,操作用户   private 才能String 用户名;   private 才能;String  admModel;,//,模块   private 才能;String  admEvent;,//,操作   private 才能;Date  createDate;,//,操作内容   private 才能;String  admOptContent;,//,操作内容   private 才能;String  desc;,//,备注   设置/获取才能略   }

<强> 4.2。ILogManager

定义日志处理的接口类ILogManager

我们可以将日志存入数据库,也可以将日志发送到开中间件,如果复述,mq等等。每一种日志处理类都是此接口的实现类

public  interface  ILogManager  {   ,/* *   ,,*,日志处理模块   ,,*,@param  paramLogAdmBean   ,,*/void 才能dealLog (LogAdmModel  paramLogAdmBean);   }

使用Spring AOP怎么实现统一注解功能