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)

相关推荐
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 工厂能耗分析平台的设计与实现为例,包含答辩的问题和答案
java·vue.js
码事漫谈6 小时前
C++ 多线程开发:从零开始的完整指南
后端
9ilk6 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
码事漫谈6 小时前
十字路口的抉择:B端与C端C++开发者的职业路径全解析
后端
Spring AI学习7 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring
提笔了无痕7 小时前
git基本了解、常用基本命令与使用
git·后端
java1234_小锋8 小时前
Spring IoC的实现机制是什么?
java·后端·spring
喵个咪8 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:JWT 集成指南
后端·go
绝不收费—免费看不了了联系我8 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi