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)

相关推荐
掘金者阿豪10 分钟前
若依启动突然报 Redis MISCONF?一次从应用报错到磁盘爆满的完整排查记录
后端
莫得感情 o1 小时前
并发 14 · 收官:虚拟线程与结构化并发
java·并发
boooooooom1 小时前
尝尝咸淡:从朴素 RAG 到 Graph RAG——一个烹饪问答系统的三层检索升级之路
前端·后端·llm
聚美智数1 小时前
图片水印-图片剪裁-图片缩放API接口介绍
java·服务器·数据库
xierui1231232 小时前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
2601_963870182 小时前
【计算机毕业设计】基于Vue+Spring Boot的助农电商系统的设计与实现
spring boot·后端·课程设计
cfm_29142 小时前
Spring AI Tool 调用架构全解
java·人工智能·spring
sun༒2 小时前
Spring @Scheduled 定时任务详解:Cron表达式、执行顺序、优先级与并行调度
java·后端·spring
yuhaiqiang2 小时前
从这两件事就能看出 vibecoding 距离专业作品差距有多大?AI 能抹平技术,但抹不平品味 !
前端·后端·程序员
一次旅行3 小时前
DeepSeek‑V4‑Flash‑Vision‑Exp 小白入门实战|3种传图方式、完整可跑代码、避坑排障
java·前端·人工智能