深入理解 Spring Aop 实现原理

本文全面解析了AOP(面向切面编程)的概念及其在Spring框架中的应用,包括静态代理、动态代理(JDK与Cglib)、Spring AOP的选择策略、链式调用机制及经典场景如事务控制、安全校验与缓存管理。同时,文章还提供了使用Spring AOP的注意事项,帮助开发者避免常见陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

1. 编程范式概览:

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

2. Aop的初衷:

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

二、代理详解

1. 静态代理 :

    1. 静态代理接口
在这里插入图片描述
    2. 真实对象
在这里插入图片描述
    3. 代理对象
在这里插入图片描述
    4. 调用代理对象的方法
在这里插入图片描述
  :当真实对象每添加一个方法的时候,静态代理对象相应的也要添加一个方法(在源码层面),很麻烦,不灵活。

2. 动态代理 - 基于JDK :

    1. 代理对象
在这里插入图片描述
    2. 调用代理对象的方法
在这里插入图片描述
  :基于JDK的动态代理,会生成一个存放真实对象方法信息的class文件,在运行期间动态调用代理对象的方法,当真实对象增加方法时,也无需修改代理对象。

3. 动态代理 - 基于Cglib :

    1. 代理对象
在这里插入图片描述
    2. 调用代理对象的方法
在这里插入图片描述

三、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值