有关 Spring AOP 的概念就不细讲了, 网上这样的文章一大堆, 要讲我也不会比别人讲得更好, 所以就不啰嗦了.
为什么要用 Spring AOP 呢? 少写代码, 专注自身业务逻辑实现(关注本身的业务而不去想其它事情, 如安全, 事务, 日志等), 用点上档次的话说: 通过非侵入式的方式实现我们要实现的功能.
我们为什么要用 Spring AOP 来实现系统日志呢? 系统日志的特点是在系统的多个模块中都要用到, 为了实现日志的统一管理, 我们一般有以下三种做法:
定义日志实现类, 在需要记录日志的地方创建实例来进行调用;
定义一个日志接口及实现类, 要用到日志的地方继承该接口(为什么是要定义接口, 而不是直接定义类, 是因为接口能够实现多继承, 而我们的后台类中有不少本身就是要继承相应的接口的, 这样不会因为日志接口的引入而影响我们其他的业务实现);
引入 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 机制.(不太恰当, 好比面向对象编程, 就要理解封装, 继承和多态一样), 理解最好, 不理解也不会太影响您工作的开展.
来源: http://www.bubuko.com/infodetail-3415601.html