Spring AOP原理是什么 Spring AOP动态代理实现【教程】

畫卷琴夢

畫卷琴夢

2026-05-09

748人浏览

原创

spring aop默认自动选择代理方式:目标类实现接口时用jdk动态代理,否则用cglib;可通过@enableaspectjautoproxy(proxytargetclass = true)强制启用cglib。

spring aop原理是什么 spring aop动态代理实现【教程】

Spring AOP 的核心原理是基于代理(Proxy)机制,在不修改原始类代码的前提下,为方法调用“织入”横切逻辑(如日志、事务、权限校验等)。它本身不直接操作字节码,而是依托 Java 的动态代理技术,在运行时生成代理对象,拦截目标方法执行流程。

Spring AOP 默认使用 JDK 动态代理还是 CGLIB?

Spring 会自动选择:

  • 如果目标类实现了至少一个接口,默认用 JDK 动态代理(基于 java.lang.reflect.Proxy),代理接口类型;
  • 如果目标类没有实现任何接口,则强制使用 CGLIB 代理(通过字节码增强生成子类);
  • 你也可以通过 @EnableAspectJAutoProxy(proxyTargetClass = true) 强制启用 CGLIB,哪怕有接口也走子类代理。

JDK 动态代理是怎么工作的?

它依赖三个关键角色:

  • 目标对象:原始业务类(必须实现接口);
  • InvocationHandler:统一拦截逻辑的处理器,所有代理方法调用最终都落到它的 invoke() 方法;
  • Proxy.newProxyInstance():根据类加载器、接口列表和 handler 创建代理实例。

Spring 内部将切面(@Aspect)、切入点(@Pointcut)和通知(@Before/@After 等)组装成一个 ReflectiveMethodInvocation 链,由 DefaultAopProxyFactory 封装进 JDK 的 InvocationHandler 中。

Bandy AI
Bandy AI

全球领先的电商设计Agent

下载

CGLIB 代理的关键特点

CGLIB 不依赖接口,而是通过继承目标类生成子类(重写非 final 方法),因此:

  • 目标类不能是 final,方法也不能是 finalprivate(否则无法被子类覆盖);
  • 需要额外引入 cglib-nodep(Spring 5.0+ 已内置,无需手动添加);
  • 性能略高于 JDK 代理(尤其在大量代理场景),但启动稍慢(需生成字节码)。

通知执行顺序与增强链(Advice Chain)

多个通知(如 @Before + @Around + @AfterReturning)不是简单串行,而是按责任链模式组织:

  • @Around 可以控制是否执行目标方法(用 proceed());
  • @Before 在目标方法前执行,@After 在之后(无论是否异常);
  • @AfterReturning 仅在正常返回后触发,@AfterThrowing 仅在抛异常后触发;
  • 同类型通知可通过 @Order 或实现 Ordered 接口指定优先级。

Spring 把这些通知包装成 Advisor,再由 AdvisedSupport 统一管理并构建调用链。

基本上就这些。理解代理选型、拦截入口和通知生命周期,就能稳住 Spring AOP 的主干逻辑。实际开发中,多数问题出在代理失效(比如自调用、非 public 方法、final 类)——这些都不是 bug,而是代理机制本身的边界。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

1153

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

194

25

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

8

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

5

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

7

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

4

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

0

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习