Spring AOP面向切面编程原理回顾小结I

Spring AOP面向切面编程原理回顾小结I

1.面向切面编程是指将需要在相同位置复用的代码提取出来形成切面,然后定义各种类型的增强处理方法并通过代理设计模式实现增强处理方法在目标方法执行前后进行各种形式的有机结合,这个增强处理方法和目标方法有机结合的过程又叫做织入,从而满足不同场景下切面代码的统一管理和目标方法的统一织入管理。切面是一个横切逻辑,由各种类型的增强处理方法组成,比如常用的前置增强后置增强,异常抛出增强,环绕增强,最终增强等。横切逻辑指的是目标方法和织入的增强处理方法通过各种形式封装结合在一起的工作单元。相当于横切整个目标方法,在横切之后的各个切片中织入增强处理方法实现代码托管。通过代理设计模式创建每个目标方法执行实例的代理实例,从而使用代理实例替代目标实例来执行目标方法(也叫执行代理方法,代理方法默认直接调用目标实例的目标方法),由于代理实例是代替目标实例执行,所以代理实例就可以在代理方法中在调用目标方法执行前后加入各种类型的增强处理方法来拦截各种情况下目标方法的执行,而代理方法动态织入增强处理并调用目标实例目标方法执行的整个过程对于目标实例来说并不关心,因为目标实例在执行特定的目标方法时已经完全托管给了它的代理实例代替他做,因此AOP的优点就不言而喻了:可以在目标方法执行前后动态加入功能并可以对这些需要动态加入的功能(即各类增强处理方法)进行统一定义和管理,提高代码可扩展性和可维护性。但是由于代理大多数是基于继承实现的,因此有几个地方需要注意:

(1).AOP存在目的并不是用来替代OOP,相反的是,AOP恰恰依赖于OOP,AOP只是OOP思想的一种扩展或者说先进思想,AOP思想也是OOP思想的显著进步。

(2).AOP主要应用场景是记录日志,事务处理,权限控制,拦截器。最常见的Spring声明式事务管理就是基于AOP面向切面的设计器想来实现的。

(3).SpringAOP实现动态代理的模式有两种,一种是只能代理接口的JDK动态代理方式(默认,即proxy-target-class默认值false),另外一种是可以代理任何Bean组件的CGLIB动态代理方式(需要显示指定aop-aspectj元素的proxy-target-class属性值为true)

相关推荐
猿究院_夏燊2 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog2 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿3 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河3 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
Jlzn88883 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
流烟默3 小时前
MCP第 5 篇:用 Spring AI 写 MCP:注解、自动配置、ChatClient 集成
人工智能·spring·mcp封装
香吧香3 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
CCblandy3 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
我是人✓3 小时前
SpringBoot项目的五种创建方式
java·spring boot·后端
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 阿里云 OSS 入门案例:从创建 Bucket 到上传拿到可访问 URL
java·阿里云·交友