Async和Transactional自调用不生效我查了一上午才发现是同一个坑
我招了一个实习生让他写个异步处理任务。他用 Spring 的Async写了一个 Service怎么调都不生效。代码长这样ServicepublicclassOrderService{publicvoidprocess(LongorderId){this.sendNotification(orderId);// 希望异步执行}AsyncpublicvoidsendNotification(LongorderId){// 发通知...}}他说「我加了 Async 了啊为什么还是同步执行的」我一看就笑了——自己调自己AOP 管不了你。为什么 Async 不生效Spring 的Async、Transactional、Cacheable这些注解都是通过 AOP 代理实现的。Spring 会给 Bean 创建一个代理对象。你调用orderService.process()时实际上调用的是代理对象的方法。代理对象在方法前后织入事务、异步等逻辑。但问题来了process()方法里this.sendNotification()——这个this是原始对象不是代理对象。原始对象调用sendNotification()时Spring 根本没有机会拦截直接执行了原始方法。Transactional自调用不生效也是同一个道理。三种解法解法一注入自己最简单ServicepublicclassOrderService{AutowiredprivateOrderServiceself;// 注入代理对象publicvoidprocess(LongorderId){self.sendNotification(orderId);// 通过代理调用}AsyncpublicvoidsendNotification(LongorderId){// 现在真正异步了}}注意Spring 4.3 之后如果构造器注入会循环依赖报错用Lazy解决LazyAutowiredprivateOrderServiceself;解法二拆成两个 Service最推荐ServicepublicclassOrderService{AutowiredprivateNotificationServicenotificationService;publicvoidprocess(LongorderId){notificationService.sendNotification(orderId);}}ServicepublicclassNotificationService{AsyncpublicvoidsendNotification(LongorderId){// 独立的异步 Service}}这样结构清晰职责单一测试也好写。解法三用 ApplicationContext 拿代理ServicepublicclassOrderService{AutowiredprivateApplicationContextctx;publicvoidprocess(LongorderId){OrderServiceproxyctx.getBean(OrderService.class);proxy.sendNotification(orderId);}}这种偏 Hack能不用就不用。不只是 Async同样的坑Transactional也一样ServicepublicclassUserService{TransactionalpublicvoidcreateUser(Useruser){userMapper.insert(user);this.updateStats();// 事务不会生效}Transactional(propagationPropagation.REQUIRES_NEW)publicvoidupdateStats(){// 你以为会开启新事务其实没有}}自调用 没有事务、没有异步、没有缓存。记住这一条就够了。核心要点✅Async/Transactional自调用不生效因为this不是代理对象✅ 解法一注入自己Autowired self✅ 解法二拆成两个 Service推荐✅ 解法三ApplicationContext.getBean()不推荐✅ 不是 Bug是 Spring AOP 代理机制决定的关于作者无羡独立开发者全栈工程师专注 AI 应用与微服务架构。 分类技术复盘 个人博客 — 更多技术文章✨ 开发者福利整理 — 云服务资源汇总 软件工坊 — 我的技术分享 个人门户 — 独立开发作品全集

相关新闻

小程序计算机毕设之展示、地方非遗产品展示、订单管理综合系统 文山手工艺品线上推广售卖运维平台(完整前后端代码+说明文档+LW,调试定制等)

小程序计算机毕设之展示、地方非遗产品展示、订单管理综合系统 文山手工艺品线上推广售卖运维平台(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/26 23:50:48 阅读更多 →
小程序计算机毕设之基于 SpringBoot 的多商家外卖点餐服务小程序 移动端智能外卖点餐与评价管理系统(完整前后端代码+说明文档+LW,调试定制等)

小程序计算机毕设之基于 SpringBoot 的多商家外卖点餐服务小程序 移动端智能外卖点餐与评价管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/26 23:50:48 阅读更多 →
百考通:AI精准赋能,让每一份调研与设计都高效落地,满足多元研究场景

百考通:AI精准赋能,让每一份调研与设计都高效落地,满足多元研究场景

在数字化时代,市场调研、产品设计、学术研究等场景中,问卷设计作为核心环节,直接影响着数据收集的质量与工作推进的效率。传统问卷设计往往面临流程繁琐、耗时耗力、问题设计不精准等痛点,而百考通(https://www.baikao…

2026/7/26 23:49:47 阅读更多 →

最新新闻

三合一协议支持:LuckyLilliaBot如何重新定义QQ机器人开发体验

三合一协议支持:LuckyLilliaBot如何重新定义QQ机器人开发体验

三合一协议支持:LuckyLilliaBot如何重新定义QQ机器人开发体验 【免费下载链接】LuckyLilliaBot 支持 OneBot 11、Satori 和 Milky 协议 项目地址: https://gitcode.com/gh_mirrors/li/LuckyLilliaBot 在QQ机器人开发领域,开发者常常面临一个困境&…

2026/7/27 0:12:01 阅读更多 →
开源精神与传统文化的“共享“理念:从太极到众包

开源精神与传统文化的“共享“理念:从太极到众包

开源精神与传统文化的"共享"理念:从太极到众包 一、太极图和开源生态,共享着同一个底层逻辑 太极图的核心是阴阳互济、生生不息。一个点不是孤立的存在,而是在整体关系中获得意义。开源社区的核心是贡献与反馈的循环。一段代码不是…

2026/7/27 0:12:01 阅读更多 →
如何在30分钟内搭建你的第一个工业监控系统:FUXA实战指南

如何在30分钟内搭建你的第一个工业监控系统:FUXA实战指南

如何在30分钟内搭建你的第一个工业监控系统:FUXA实战指南 【免费下载链接】FUXA Web-based Process Visualization (SCADA/HMI/Dashboard) software 项目地址: https://gitcode.com/gh_mirrors/fu/FUXA 想要快速搭建一个专业的工业监控系统,却担心…

2026/7/27 0:12:01 阅读更多 →
拯救者笔记本性能调优深度解析:Lenovo Legion Toolkit技术实战指南

拯救者笔记本性能调优深度解析:Lenovo Legion Toolkit技术实战指南

拯救者笔记本性能调优深度解析:Lenovo Legion Toolkit技术实战指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …

2026/7/27 0:12:01 阅读更多 →
Nginx 反向代理与负载均衡实战(基于陶辉《深入理解 Nginx》第三章)

Nginx 反向代理与负载均衡实战(基于陶辉《深入理解 Nginx》第三章)

Nginx 反向代理与负载均衡实战(基于陶辉《深入理解 Nginx》第三章)本文所有命令输出均来自两台真实云服务器(Ubuntu 24.04.4 / nginx 1.24.0)的现场回显,未做任何编造。 拓扑目标:一台代理层把流量按多种策…

2026/7/27 0:11:00 阅读更多 →
Video DownloadHelper CoApp终极指南:5个技巧轻松下载网络视频

Video DownloadHelper CoApp终极指南:5个技巧轻松下载网络视频

Video DownloadHelper CoApp终极指南:5个技巧轻松下载网络视频 【免费下载链接】vdhcoapp Companion application for Video DownloadHelper browser add-on 项目地址: https://gitcode.com/gh_mirrors/vd/vdhcoapp Video DownloadHelper CoApp是Video Downl…

2026/7/27 0:11:00 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻