介绍
本篇文章为大家展示了使用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怎么实现统一注解功能