1、引言

有关Spring AOP的概念就不细讲了,网上这样的文章一大堆,要讲我也不会比别人讲得更好,所以就不啰嗦了。

为什么要用Spring AOP呢?少写代码专注自身业务逻辑实现(关注本身的业务而不去想其它事情,如安全、事务、日志等),用点上档次的话说:通过非侵入式的方式实现我们要实现的功能

我们为什么要用Spring AOP来实现系统日志呢?系统日志的特点是在系统的多个模块中都要用到,为了实现日志的统一管理,我们一般有以下三种做法:

  1. 定义日志实现类,在需要记录日志的地方创建实例来进行调用;
  2. 定义一个日志接口及实现类,要用到日志的地方继承该接口(为什么是要定义接口,而不是直接定义类,是因为接口能够实现多继承,而我们的后台类中有不少本身就是要继承相应的接口的,这样不会因为日志接口的引入而影响我们其他的业务实现);
  3. 引入Spring AOP,面向切面编程,非侵入式的实现日志功能。

分析以上三种方式,都可以实现系统日志功能:

  • 但第1种太繁琐了,搞得到处都是,不好看啊,也显得low;
  • 第2种虽然不像第1种一样,但要记录日志就非得继承接口,还得进行一系列的调用方法、传递参数,总觉得额外增加了好多的累赘;
  • 第3种,还不赖,只需在要记录日志的方法上添加一个注解就行了,能够记录的动态日志内容(区别于网上好多文章介绍的内容,记录的都是静态内容,简单是简单,了,但不实用啊)可以相当丰富,代码好干净,看着就爽。

2、Spring AOP实现系统日志要几步?

把大象装冰箱要几步?第一步打开冰箱,第二步把大象装进去,第三步关上冰箱门,齐活。
同样,Spring AOP实现系统日志要几步呢?

  第一步自定义注解类;
  第二步定义切面类;
  第三步在普通类中的方法上加入自定义日志注解,齐活。

下面一张图说明:

理解了上面的图,您就已经可以利用Spring AOP来实现您自己的系统日志了。

系统日志一般保存在数据库里面,以方便管理人员的浏览查询。另外我们需要做到不同的操作类型要记录不同的内容,如增加或删除了数据,那么要记录增加或删除的详细信息,如果做了修改,日志要能记录修改前后的值,等等,这些工作都在第二步定义切面类中实现。

有关详尽的代码,大家可以参考视频:https://edu.51cto.com/sd/091c7 ,这里就不详细贴出来了

3、Spring AOP必要知识点

虽然说我不想讲解Spring AOP的概念,但必要的概念大家还是要清楚的,否则就会云山雾罩,照猫画虎可能画的都会不像。

对于下面Spring AOP的概念,我尽量讲人话:

连接点(JoinPoint):方法的前面、后面以及异常都是连接点,应用时的类为ProceedingJoinPoint;
切入点(Pointcut):就是在方法前面、还是后面或者是前后都织入,对应注解:@Before、@After、@Around;
织入(weaving):就是在方法前面、还是后面或者是前后都织入;对应注解:@Retention,包括三种类型,SOURCE、CLASS、RUNTIME、指明注解的生命周期,一般采用RUNTIME(运行时注解);
目标(target):向方法上添加新方法属性,对应注解:@Target;
切面(aspect):具体干活的类,对应注解:@Aspect;

另外还有代理(proxy)、通知(Advice)、引入(introduction)这三个概念,也就是三个概念,便于你更好的理解AOP机制。(不太恰当,好比面向对象编程,就要理解封装、继承和多态一样),理解最好,不理解也不会太影响您工作的开展。

化繁就简,如何利用Spring AOP快速实现系统日志的更多相关文章

  1. 利用spring AOP 和注解实现方法中查cache-我们到底能走多远系列(46)

    主题:这份代码是开发中常见的代码,查询数据库某个主表的数据,为了提高性能,做一次缓存,每次调用时先拿缓存数据,有则直接返回,没有才向数据库查数据,降低数据库压力. public Merchant lo ...

  2. 利用Spring AOP自定义注解解决日志和签名校验

    转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...

  3. (转)利用Spring AOP自定义注解解决日志和签名校验

    一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ...

  4. 利用Spring AOP和自定义注解实现日志功能

    Spring AOP的主要功能相信大家都知道,日志记录.权限校验等等. 用法就是定义一个切入点(Pointcut),定义一个通知(Advice),然后设置通知在该切入点上执行的方式(前置.后置.环绕等 ...

  5. 利用Spring AOP切面对用户访问进行监控

    开发系统时往往需要考虑记录用户访问系统查询了那些数据.进行了什么操作,尤其是访问重要的数据和执行重要的操作的时候将数记录下来尤显的有意义.有了这些用户行为数据,事后可以以用户为条件对用户在系统的访问和 ...

  6. 利用spring AOP 实现统一校验

    开发环境 JDK: 1.7 spring: 4.0.6 aspect: 1.7.4 应用背景   在APP与后台通讯的过程中,我们一般都会有个authToken的字符串校验,判断那些请求是需要校验用户 ...

  7. 利用Spring AOP机制拦截方法一例

    直接上代码: @Aspect // for aop @Component // for auto scan @Order(0) // execute before @Transactional pub ...

  8. 利用spring AOP实现每个请求的日志输出

    前提条件: 除了spring相关jar包外,还需要引入aspectj包. <dependency> <groupId>org.aspectj</groupId> & ...

  9. [编码实践]SpringBoot实战:利用Spring AOP实现操作日志审计管理

    设计原则和思路: 元注解方式结合AOP,灵活记录操作日志 能够记录详细错误日志为运营以及审计提供支持 日志记录尽可能减少性能影响 操作描述参数支持动态获取,其他参数自动记录. 1.定义日志记录元注解, ...

随机推荐

  1. Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)

    561. 数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), -, (an, bn) ,使得从1 到 n 的 min(ai, bi ...

  2. Java实现 洛谷 P1980 计数问题

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ...

  3. java实现迷宫走法

    ** 迷宫走法** 迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更愿意使用"紧贴墙壁,靠右行走"的简单规则. 下面的 ...

  4. Java实现第八届蓝桥杯购物单

    购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打 ...

  5. Linux 文件特殊权限-SetUID

    SetUID非常类似于Windows中以管理员身份来运行文件,针对的是可执行文件,而且命令执行者要拥有对这个文件的执行权限,只在文件执行的过程中变换身份,最常见的passwd命令就具有SetUID权限 ...

  6. python—迭代器,生成器与for循环机制

    一:什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前) 2.可迭代对 ...

  7. Centos7.x RPM安装ELK 7.5.0

    一.环境介绍   单位需要分析tomcat 日志和业务日志,比较以后还是选择用ELK 来进行日志的分析,以及可视化的展示. 系统环境 服务器: 1.AWS EC2 2C8G [root@ip-10-0 ...

  8. zabbix 中文乱码

    环境 zabbix 3.4.7 centos 7.4 问题现象 zabbix 中文乱码     解决方法 1.先准备一个字体包    Windows路径 C:\Windows\Fonts\simkai ...

  9. Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)

    1.简介 JMeter配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用.将在其作用域的初始化阶段处理.配置元件(Config Element)提供对 ...

  10. css布局相关:涉及到常见页面样式难点

    一.display:table用法 Table:display:tableBody:table-row-group;Tr: table-row;Td: table-cell https://www.c ...