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)

相关推荐
大鱼七成饱7 分钟前
💥 从崩溃到稳定:我踩过的 Rust Tokio 线程池坑(含代码示例)
后端
喵个咪24 分钟前
开箱即用的GO后台管理系统 Kratos Admin - 站内信
后端·微服务·go
凯芸呢28 分钟前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
竹竹零35 分钟前
JacksonUtil--序列化与反序列化
java·开发语言·windows
钱多多_qdd1 小时前
基础篇:IoC(三):Bean实例化策略InstantiationStrategy
java·spring
float_com1 小时前
【java基础语法】---- 综合训练
java
韩立学长1 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
Dyan_csdn1 小时前
springboot系统设计选题3
java·spring boot·后端
sheji34161 小时前
【开题答辩全过程】以 基于Java的旅游网站的设计与开发为例,包含答辩的问题和答案
java·开发语言·旅游
ABdolphin1 小时前
Spring-cloud 主键Eureka
java·云原生·eureka