有关Spring AOP的概念就不细讲了,网上这样的文章一大堆,要讲我也不会比别人讲得更好,所以就不啰嗦了。
为什么要用Spring AOP呢?少写代码、专注自身业务逻辑实现(关注本身的业务而不去想其它事情,如安全、事务、日志等),用点上档次的话说:通过非侵入式的方式实现我们要实现的功能。
我们为什么要用Spring AOP来实现系统日志呢?系统日志的特点是在系统的多个模块中都要用到,为了实现日志的统一管理,我们一般有以下三种做法:
- 定义日志实现类,在需要记录日志的地方创建实例来进行调用;
- 定义一个日志接口及实现类,要用到日志的地方继承该接口(为什么是要定义接口,而不是直接定义类,是因为接口能够实现多继承,而我们的后台类中有不少本身就是要继承相应的接口的,这样不会因为日志接口的引入而影响我们其他的业务实现);
- 引入Spring AOP,面向切面编程,非侵入式的实现日志功能。
分析以上三种方式,都可以实现系统日志功能:
- 但第1种太繁琐了,搞得到处都是,不好看啊,也显得low;
- 第2种虽然不像第1种一样,但要记录日志就非得继承接口,还得进行一系列的调用方法、传递参数,总觉得额外增加了好多的累赘;
- 第3种,还不赖,只需在要记录日志的方法上添加一个注解就行了,能够记录的动态日志内容(区别于网上好多文章介绍的内容,记录的都是静态内容,简单是简单,了,但不实用啊)可以相当丰富,代码好干净,看着就爽。
把大象装冰箱要几步?第一步打开冰箱,第二步把大象装进去,第三步关上冰箱门,齐活。
同样,Spring AOP实现系统日志要几步呢?
第一步自定义注解类;
第二步定义切面类;
第三步在普通类中的方法上加入自定义日志注解,齐活。
下面一张图说明:
理解了上面的图,您就已经可以利用Spring AOP来实现您自己的系统日志了。
系统日志一般保存在数据库里面,以方便管理人员的浏览查询。另外我们需要做到不同的操作类型要记录不同的内容,如增加或删除了数据,那么要记录增加或删除的详细信息,如果做了修改,日志要能记录修改前后的值,等等,这些工作都在第二步定义切面类中实现。
有关详尽的代码,大家可以参考我的视频:https://edu.51cto.com/sd/091c7 ,这里就不详细贴出来了
虽然说我不想讲解Spring AOP的概念,但必要的概念大家还是要清楚的,否则就会云山雾罩,照猫画虎可能画的都会不像。
对于下面Spring AOP的概念,我尽量讲人话:
连接点(JoinPoint):方法的前面、后面以及异常都是连接点,应用时的类为ProceedingJoinPoint;
切入点(Pointcut):就是在方法前面、还是后面或者是前后都织入,对应注解:@Before、@After、@Around;
织入(weaving):就是在方法前面、还是后面或者是前后都织入;对应注解:@Retention,包括三种类型,SOURCE、CLASS、RUNTIME、指明注解的生命周期,一般采用RUNTIME(运行时注解);
目标(target):向方法上添加新方法属性,对应注解:@Target;
切面(aspect):具体干活的类,对应注解:@Aspect;
另外还有代理(proxy)、通知(Advice)、引入(introduction)这三个概念,也就是三个概念,便于你更好的理解AOP机制。(不太恰当,好比面向对象编程,就要理解封装、继承和多态一样),理解最好,不理解也不会太影响您工作的开展。
原文:https://blog.51cto.com/3058076/2470130