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)

相关推荐
IT_陈寒1 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
兔子零10241 小时前
手把手教你在 Claude Code 中接入 DeepSeek-V4
后端
掌心向暖RPA自动化1 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭2 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
phenhorlin2 小时前
我做了个工具,让切换 Homebrew 镜像像切 npm 源一样简单
后端·shell
6952 小时前
两周浅学 RAG
后端
TeamDev2 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood3 小时前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven