1. 概述
在一般系统中,当我们做了一些重要的操作时,如登陆系统,添加用户,删除用户等操作时,我们需要将这些行为持久化。本文我们通过Spring AOP和Java的自定义注解来实现日志的插入。此方案对原有业务入侵较低,实现较灵活
2. 日志的相关类定义
我们将日志抽象为以下两个类:功能模块和操作类型
使用枚举类定义功能模块类型ModuleType,如学生、用户模块
public enum ModuleType {
DEFAULT("1"), // 默认值
STUDENT("2"),// 学生模块
TEACHER("3"); // 用户模块
private ModuleType(String index){
this.module = index;
}
private String module;
public String getModule(){
return this.module;
}
}
使用枚举类定义操作的类型:EventType。如登陆、添加、删除、更新、删除等
public enum EventType {
DEFAULT("1", "default"), ADD("2", "add"), UPDATE("3", "update"), DELETE_SINGLE("4", "delete-single"),
LOGIN("10","login"),LOGIN_OUT("11","login_out");
private EventType(String index, String name){
this.name = name;
this.event = index;
}
private String event;
private String name;
public String getEvent(){
return this.event;
}
public String getName() {
return name;
}
}
3. 定义日志相关的注解
3.1. @LogEnable
这里我们定义日志的开关量,类上只有这个值为true,这个类中日志功能才开启
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface LogEnable {
/**
* 如果为true,则类下面的LogEvent启作用,否则忽略
* @return
*/
boolean logEnable() default true;
}
3.2. @LogEvent
这里定义日志的详细内容。如果此注解注解在类上,则这个参数做为类全部方法的默认值。如果注解在方法上,则只对这个方法启作用