Spring AOP原理

news/2025/10/15 16:53:15/文章来源:https://www.cnblogs.com/aibi1/p/19143750

目录
  • 1. AOP核心概念
  • 2. 动态代理机制
    • (1)JDK动态代理
    • (2)CGLIB动态代理
  • 3. AOP执行流程
  • 4. 与AspectJ的关系
  • 总结

Spring AOP(面向切面编程)是Spring框架的核心特性之一,它基于动态代理和字节码增强技术实现,能够在不修改原有代码的情况下,为程序添加横切关注点(如日志、事务、安全等)。其核心原理可以从以下几个方面理解:

1. AOP核心概念

  • 切面(Aspect):封装横切关注点的类,包含通知和切入点。
  • 通知(Advice):切面的具体实现(如前置通知、后置通知等)。
  • 切入点(Pointcut):定义通知作用的目标方法(通过表达式匹配)。
  • 连接点(JoinPoint):程序执行过程中可插入切面的点(如方法调用、异常抛出等)。
  • 代理(Proxy):AOP通过代理对象执行目标方法,并在执行前后插入通知逻辑。

2. 动态代理机制

Spring AOP的核心实现依赖动态代理,根据目标类是否实现接口,自动选择两种代理方式:

(1)JDK动态代理

  • 适用场景:目标类实现了接口。
  • 原理:通过java.lang.reflect.Proxy类在运行时动态生成代理类,代理类实现目标接口,并在接口方法中嵌入通知逻辑。
  • 特点:只代理接口中的方法,不代理类中的非接口方法。
// JDK动态代理示例(简化版)
public class JdkProxy implements InvocationHandler {private Object target; // 目标对象public JdkProxy(Object target) {this.target = target;}// 生成代理对象public Object getProxy() {return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);}// 代理逻辑(调用目标方法时执行)@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 前置通知(如日志)System.out.println("方法执行前...");// 执行目标方法Object result = method.invoke(target, args);// 后置通知System.out.println("方法执行后...");return result;}
}

(2)CGLIB动态代理

  • 适用场景:目标类未实现接口。
  • 原理:通过CGLIB(Code Generation Library)在运行时动态生成目标类的子类,并重写目标方法,在子类中嵌入通知逻辑。
  • 特点:可代理类中的所有方法(需注意final方法无法被重写,因此不能被代理)。

3. AOP执行流程

  1. 解析配置:Spring容器启动时,解析AOP相关配置(如@Aspect@Before等注解或XML配置),识别切面、通知和切入点。
  2. 创建代理:对符合切入点匹配的目标类,Spring自动为其创建代理对象(JDK或CGLIB代理)。
  3. 拦截调用:当调用目标方法时,实际执行的是代理对象的方法。
  4. 执行通知:代理对象在目标方法执行前后(或异常时)插入通知逻辑。
  5. 执行目标方法:通知逻辑执行完毕后,代理对象调用原始目标类的方法。

4. 与AspectJ的关系

  • Spring AOP使用了AspectJ的切入点表达式语法(如execution(* com.example.service.*.*(..))),但实现原理不同。
  • AspectJ是基于编译期或类加载期的字节码增强,而Spring AOP是基于运行时的动态代理,更轻量且与Spring容器深度集成。

总结

Spring AOP通过动态代理技术,在不侵入业务代码的前提下,实现了横切关注点的模块化,降低了代码耦合度。其核心是通过代理对象拦截目标方法调用,并在调用过程中织入通知逻辑,从而实现日志记录、事务管理等通用功能的复用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure VM (46) 分布式tcping监控

Azure VM (46) 分布式tcping监控《Windows Azure Platform 系列文章目录》具体的项目在我的github里:https://github.com/leizhang1984/pingmesh

Ventoy引导Kali live USB持久化

Ventoy 引导 Kali Live USB 持久化Ventoy 引导 Kali Live USB 持久化Ventoy 介绍 使用 Ventoy 替代 ISO 写盘 Ventoy 数据持久化插件简述 创建 Live 系统持久化文件 创建数据交换分区参考Ventoy 介绍 以下介绍来自 Ven…

知识库管理工具深度测评:ONES、Confluence 等10款工具全面对比

在数字化转型浪潮下,企业越来越重视知识资产的沉淀与共享。根据 Gartner 发布的《Knowledge Management Market Guide 2024》,全球超过85%的中大型组织已经采用知识库管理工具(Knowledge Base Management Tools)来…

从SGD到AdamW:深度学习优化器演进全解析与实践指南

从SGD到AdamW:深度学习优化器演进全解析与实践指南从SGD到AdamW:深度学习优化器演进全解析与实践指南 摘要 在深度学习中,优化器(Optimizer)是连接模型与数据的桥梁,它负责根据损失函数的梯度来更新模型的参数,…

【面试题】人工智能工程师高频面试题汇总:循环神经网络篇(题目+答案)

后台私信雯雯老师,备注:循环神经网络,领取更多相关面试题 随着人工智能技术的突飞猛进,AI工程师成为了众多求职者梦寐以求的职业。想要拿下这份工作,面试的时候得展示出你不仅技术过硬,还得能解决问题。所以,提…

做了个手机上的“视频播放器”,获益匪浅

先上代码再解释踩过的坑。<html><head><meta charset="UTF-8"> <meta name="screen-orientation" content="landscape"> <meta name="viewport" …

CEF关闭流程

整理了一下之前写的cef推荐的关闭流程的文档 参考文档和实际demo来看,关闭流程离屏渲染和非离屏渲染时不同的,主要区别在于非离屏渲染有一个cef自建的窗口,非离屏渲染的退出和这个窗口密切相关。 CefBrowserHost::T…

AI一周资讯 251005-251015

OpenAI 2025开发者大会:多款新模型与工具重磅发布 OpenAI在2025年开发者大会上发布了一系列新模型和新工具。AgentKit是面向开发者和企业构建、部署和优化智能体的工具集,含Agent Builder、Connector Registry等组件…

2025 年中空百叶源头厂家最新推荐排行榜:聚焦国内优质供货商,助力客户精准选购可靠产品光能/光伏/电动/光动中空百叶厂家推荐

随着建筑门窗行业对遮阳、节能与采光需求的不断提升,中空百叶产品市场需求持续增长,但市场上厂家资质、产品质量差异显著。部分厂家技术落后、产能不足,难以保障大型项目供货;还有些厂家售后体系不完善,导致客户采…

2025年学校家具定制厂家最新权威推荐榜:全屋定制/衣柜/厨柜/酒柜/鞋柜/猫柜/酒店办公家具/电视柜/书包柜/图书架/宿舍上下床

2025年学校家具定制厂家最新权威推荐榜:全屋定制/衣柜/厨柜/酒柜/鞋柜/猫柜/酒店办公家具/电视柜/书包柜/图书架/宿舍上下床随着教育现代化进程的加速推进,学校家具定制行业正迎来新一轮发展机遇。2025年,教育机构对…

075_尚硅谷_位运算深度讲解

075_尚硅谷_位运算深度讲解1.2&3的运算过程和结果 2.2|3的运算过程和结果 3.2^3的运算过程和结果 4.-2^2的运算过程和结果 5.两个位移运算符

iOS框架内存中占用很高的ttc文件是否正常

1)iOS框架内存中占用很高的ttc文件是否正常2)Constant Buffer在移动端的限制是多少这是第448篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习…

Linux配置SSH名称通信

A主机 源端 1、执行ssh-keygen -t rsa //生成密钥对 2、ssh-copy-id -i /root/id_rsa_host4.pub root@38.47.106.144 //将公钥传输给B主机 3、 在本机创建 SSH 别名(~/.ssh/config) 把下面内容追加到 /root/.ssh…

cors跨域疑问解决

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

D. Not Alone

View PostD. Not AloneD. Not Alone Problem - D - Codeforces 处理一:\(b_i = b_{(i+m-2)\bmod m\;+1}\), 或 \(b_i = b_{i\bmod m\;+1}\) ​ 考虑将环分成多块处理,保证块长大于 \(1\)。 处理二:\(\sum_{i=1}^n |…

MPC模型预测控制:原理、设计与MATLAB实现

模型预测控制是一种先进的控制策略,特别适用于处理多变量约束控制问题。 1. MPC基本原理与核心思想 1.1 基本概念 MPC采用滚动优化和反馈校正的策略:预测模型:使用系统数学模型预测未来动态 优化求解:在每个采样时…

2025年焊接变位机厂家最新权威推荐榜:双轴变位机专业制造商,高效稳定助力智能焊接升级

2025年焊接变位机厂家最新权威推荐榜:双轴变位机专业制造商,高效稳定助力智能焊接升级随着工业4.0和智能制造的深入推进,焊接变位机作为焊接自动化系统的核心组成部分,正迎来技术升级与市场需求的爆发式增长。根据…

体育视频分析中的计算机视觉技术创新

本文详细介绍了两项基于神经网络模型的视频流增强技术,包括体育场地注册系统和影视剧片头片尾检测系统。通过密集关键点网格和双向长短期记忆网络等创新方法,显著提升了视频分析的准确性和实时性。体育视频分析中的计…

美股 SaaS 巨头如何用 Karpenter 节省 1/4 的 EC2 成本

美股 SaaS 巨头如何用 Karpenter 节省 1/4 的 EC2 成本Freshworks 采用 Karpenter 优化 AWS EKS 资源利用率,解决原有方案(Cluster Autoscaler)导致的 vCPU 仅用35%、内存54% 的低效问题。Karpenter 通过实时匹配 P…

2025年法兰罩厂家最新权威推荐榜:专业防护与精密制造,工业管道安全守护者优选品牌

2025年法兰罩厂家最新权威推荐榜:专业防护与精密制造,工业管道安全守护者优选品牌在工业管道系统中,法兰罩作为关键的防护部件,承担着防止介质泄漏、阻挡异物侵入、保护法兰连接部位的重要功能。随着2025年工业安全…