上文已经介绍了如何把日志写入指定文件,现在想要把操作日志写入数据库,应该如何实现呢?前面学习了spring AOP思想Spring面向AOP,可是没有实例,这里就是一个很好的应用之处。
简单说一下要实现的内容:用户像学生表增加一个学生,则把用户id,用户操作,操作时间记录进入数据库。方便用户后来查看自己的操作记录。
显然这里至少有两个表。一个学生表,一个日志表。建表。
然后建立实体类
然后写xml文件和mapper接口
然后写service层(这里只对日志写了service层,Student插入直接调用mapper接口的)
视图层很简单:一个form表单,传递学生信息
现在写控制类(用户点击注册,增加学生)
注意到这个:
@Log(value = "insertStudent")//这里添加了AOP的自定义注解
这个@Log注解是我自定义的一个注解,只要在需要把操作日志写入数据库的方法上加上这个注解,就可以在数据库写入日志了。
下面我们介绍如何利用aop实现上述功能:
首先先自定义一个注解Log。在config包下新建annotation,命名Log
@Target:
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
@Retention:
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
@Documented:
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
这样就写好了自定义的注解了。
下面利用AOP将@Log注解定义为切点,然后实现一个切面类LogAsPect,在切面类实现日志在数据库存储。这样只要增加了@Log注解,就会调用切面类,然后完成日志的写入。
这样,切面类也完成了。现在开始测试即可。
不过这里日志表插入时候后面的时分秒出错了。不知道什么原因。待会再重新看一下。但是整个流程就是这样。
最后附上工程结果,其中utils包没用上
本文参考博文:Spring boot实现AOP记录操作日志
才疏学浅之处,切莫在意。
——2019.6.27 上午