AOP(面向切面编程)的简单理解笔记
AOP(Aspect Oriented Programming 面向切面编程)是从OOP(面向对象编程)衍生出来的,我查阅了各种书籍、网课,上面的都比较说法晦涩难懂,有甚者连基本概念都没讲就直接领着啃源码,个人太笨了,不太适应这种学习方式。还是没能正确的理解AOP的本质,最后终于在知乎的这篇提问下找到了相对简单的引例。 回忆一下,OOP的三个要素,“封装”、“继承”、“多态”。其中封装要求我们将各种方法封装到一个类里面,这样做分散了代码和功能,无疑提高了代码的可维护性和可重用性,但是也产生了一些弊端。如果有功能是公用的,那么我们必须将这个功能在所有类里面重写一遍,例如记录日志功能,我们要求在某些方法执行的时候,进行日志记录,那么按照传统OOP,我们需要在这些方法里面都加入日志记录相关的代码,大大增加了代码量,你当然也可以选择将日志记录功能封装成类,然后在这些方法执行的时候调用即可,但是这样作则无疑令这些方法所属的类与日志记录类耦合,所以诞生了AOP思想,将我们需要运行的代码(切面 Aspect)动态的插入(切入)到指定的地方。 继续刚刚的例子,我们在需要进行日志记录的类方法开始运行前建立一个插入点(切入点 Point cut),当运行到这些切入点时,我们对程序进行拦截,然后通过通知(Advice) 来执行 切面,在例子中,日志记录相关的代码就是切面,而被通知的对象(被关注的对象、被注入切面的对象)就是目标对象(Target)。最后我们还要了解切面的织入(Weaving) 方式,即何时将切面注入到相应位置:编译时期织入、类加载时期织入、执行时期织入。