什么是 AOP
AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理 实现程序功能的统一维护的一种技术。
AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍 生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序 的可重用性,同时提高了开发的效率。
AOP 的作用及其优势
作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强
优势:减少重复代码,提高开发效率,并且便于维护
AOP 的底层实现
AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态 的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。
AOP 的动态代理技术
Spring的动态代理技术主要两种:
常用的动态代理技术
JDK 代理 : 基于接口的动态代理技术
cglib 代理:基于父类的动态代理技术
JDK 代理主要是基与接口,就是说缺点是 如果没接口我就无法使用这个JDK 代理
cglib代理主要基于父类。【注意 这个不是继承 这个类似于复制 】
所以 Spring的底层是基于 这两个代理完成。
我们看着图分析一下:
左边的是JDK动态代理 ,基于接口的,可以看到目标对象 和 目标接口肯定是有一样的方法,然后呢 在Spring运行时,自动生成了一个代理对象,那么他也会有相同的方法,所以可以增强方法。
右边的是cglib,其实说就是说是 基于父类,其实他的原理类似于复制,就是在Spring 运行时 生成一个代理对象 ,然后里面也是有和 目标对象拥有 一 样的方法的。