深入理解 Spring Aop 实现原理

一、概念

1. 编程范式概览:

    1. 面向过程编程
    2. 面向对象编程
    3. 面向切面编程
    4. 函数式编程
    5. 事件驱动编程

2. Aop的初衷:

    1. 解决代码重复问题
    2. 分离非功能性需求和功能性需求

二、代理详解

1. 静态代理 :

    1. 静态代理接口
深入理解 Spring Aop 实现原理_第1张图片
    2. 真实对象
深入理解 Spring Aop 实现原理_第2张图片
    3. 代理对象
深入理解 Spring Aop 实现原理_第3张图片
    4. 调用代理对象的方法
深入理解 Spring Aop 实现原理_第4张图片
  :当真实对象每添加一个方法的时候,静态代理对象相应的也要添加一个方法(在源码层面),很麻烦,不灵活。

2. 动态代理 - 基于JDK :

    1. 代理对象
深入理解 Spring Aop 实现原理_第5张图片
    2. 调用代理对象的方法
深入理解 Spring Aop 实现原理_第6张图片
  :基于JDK的动态代理,会生成一个存放真实对象方法信息的class文件,在运行期间动态调用代理对象的方法,当真实对象增加方法时,也无需修改代理对象。

3. 动态代理 - 基于Cglib :

    1. 代理对象
深入理解 Spring Aop 实现原理_第7张图片
    2. 调用代理对象的方法
深入理解 Spring Aop 实现原理_第8张图片

三、Spring Aop

1. 选择JDK还是Cglib :

    ①如果目标对象实现了接口,则默认采用JDK动态代理
    ②如果目标对象没有实现接口,则采用Cglib动态代理
    ③如果目标对象实现了接口,且强制Cglib代理,则使用Cglib动态代理

2. 链式调用 :

    Spring采用责任链模式递归地调用同一个真实对象的多个代理方法。

3. Aop经典应用场景 :

    ①事务控制:@Transcational
    ②安全校验:@PreAuthorize
    ③缓存控制:@Cacheable

四、使用Spring Aop注意事项

    ①不宜把重要的业务逻辑放在Aop中处理
    ②无法拦截static、final、private修饰的方法
    ③无法拦截内部方法调用

五、源码地址

https://gitee.com/wxj1994/aop-demo

你可能感兴趣的:(Spring,spring,aop)