一文带你彻底理解 Spring AOP

翻开编程的历史可以看到从最初的面向过程编程 ,也就是将任务分成一个个函数来实现各个步骤,最后由主函数依次调用这些函数来实现这个任务。到 OOP(面向对象编程),即从任务中抽取成一个个对象,将功能封装到不同的对象中,让对象间相互配合完成任务,从代码角度就是将功能分散到不同类的方法中,通过 OOP 的继承和多态等特性减少代码复杂度,增加可重用性。

但是当遇到需要在所有的类方法中都需要打印日志或者在所有的数据库修改中都要开启事务这种情况时就会导致在众多的对象类中出现大量的冗余代码,也许有人会说可以把这部分操作抽取出来单独作为一个类,然后再在各个类的方法中调用这个类方法,但这么做也会导致本来独立的各个类之间由于调用共同的一个类形成紧耦合。

那有没有一种方法能让我们不修改各个类里的逻辑,而在运行时可以动态的将代码切入到类的指定方法或者位置上呢,答案就是 AOP。AOP 也是一种编程范式,基于 OOP 延伸出来的编程思想,也是对 OOP 的延续和补充,如设计模式中的装饰器模式、代理模式就是基于 AOP 思想。

AOP 要解决的是问题就是将核心业务代码与辅助类型业务(比如:日志记录、权限校验、异常处理、事务控制)代码分离出来,提高模块化,降低代码耦合度,使职责更单一。

在本场 Chat 中,会讲到如下内容:

  1. AOP 的相关概念
  2. 从字节码,静态代理,动态代理讲到 Spring AOP 的实现方式
  3. 最后通过一个笔者以前在公司实际开发的例子,即在一个二方包里以 Spring Boot 下自定义注解+ AOP 的方式,实现对各个微服务业务模块接口的角色权限的检查。

适用于对所有对 AOP 感兴趣的开发者。

阅读全文: http://gitbook.cn/gitchat/activity/5dbfe6d5c847392979f56cf0

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

一文带你彻底理解 Spring AOP