什么是AOP
AOP:Aspect oriented Programming 面向切面编程
AOP是OOP的一个延续,OOP:Object oriented Programming 面向对象编程,三大特征是封装、继承、多态;OOP可以解决大部分代码重复问题。
OOP其实是一个垂直继承体系,可以解决垂直多个类代码重复问题,举例子就是 Dog 和 Cat 都继承 Animal,并获取Animal的行为,而不必在每个类中都实现相同的行为,它解决不了纵向流程中出现相同子流程的问题,觉例子就是说我现在需要知道每一个方法的执行时间,我就需要在每一个方法前面和后面来获取时间并进行执行时间的计算,这个问题是OOP解决不了的,这个问题也叫横切逻辑代码问题 。
横切逻辑代码
使用场景有限,一般是权限校验、日志打印、事务控制等。
存在的问题:
- 横切代码重复问题
- 强耦合问题,横切逻辑代码与原有业务代码紧密相连,强耦合
AOP就是在这种情况下产生的,它提出横切抽取机制,将横切逻辑代码与原有业务代码进行分离。这种情况下AOP要做的事有两个:
- 进行方法抽取,这个比较容易
- 如何将横切逻辑代码插入到原有的业务逻辑代码中去,达到我们想要的在每一个方法前后都执行相同代码的一个业务等问题,也就是解决横向代码重复问题
AOP解决了什么问题
根据上面所述,AOP解决的就是横切逻辑代码与原有业务逻辑代码进行分离,并且在不改动原有业务逻辑的情况下将横切逻辑代码应用到原有业务逻辑代码中去,从根本上进行解耦和并避免了代码重复。为什么叫面向切面编程
关键点就在于切面的理解:
切:指的是横切逻辑,其实就是我们要操作的横切逻辑代码,所以叫面向横切逻辑
面:指的是我们需要在多个方法中写入横切逻辑代码,每一个方法是一个点,多个方法多个点组成面
总的来说 AOP 是 OOP 的一个延展,OOP 是垂直继承体系的解决方案,而 AOP 是横向代码逻辑重复和耦合问题,OOP是存在在多个类中的一个思想,而AOP是一个类中多个方法的思想。归根结底的目标是减少代码重复,解耦和。