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 应用与微服务架构。 分类技术复盘 个人博客 — 更多技术文章✨ 开发者福利整理 — 云服务资源汇总 软件工坊 — 我的技术分享 个人门户 — 独立开发作品全集

相关新闻

大模型训练核心技术:框架优化与预训练算法解析

大模型训练核心技术:框架优化与预训练算法解析

1. 项目概述:大模型人才需求背后的技术趋势最近看到腾讯混元大模型团队发布的招聘信息,主要招募训练框架研发工程师和预训练算法专家。这两个岗位看似平常,实则透露了大模型领域当前最核心的技术攻坚方向。作为在AI基础设施领域摸爬滚打多年的…

2026/7/26 23:48:22阅读更多 →
TI CC32xx Cortex-M4 MCU架构解析与外设驱动开发实战指南

TI CC32xx Cortex-M4 MCU架构解析与外设驱动开发实战指南

1. 芯片概览与设计哲学如果你正在寻找一款既能搞定无线连接,又能处理复杂应用逻辑,同时还能在电池供电场景下坚挺的微控制器,TI的CC32xx系列绝对是一个绕不开的选项。我接触这个系列芯片有好几年了,从早期的原型验证到后来的量产项…

2026/7/26 23:48:22阅读更多 →
Claude在重构代码时维护测试用例同步更新的实践

Claude在重构代码时维护测试用例同步更新的实践

Claude在重构代码时维护测试用例同步更新的实践 引言 "测试用例是代码的契约,重构是契约的修订。"在大型代码库的重构过程中,最容易被忽视却最致命的环节是测试用例的同步更新——代码变了,测试还停留在旧假设上。Claude通过长上下…

2026/7/26 23:48:22阅读更多 →
全链路流量分析与性能优化实战

全链路流量分析与性能优化实战

1. 项目背景与核心目标去年第三季度,我们团队接手了一个棘手的线上业务问题:某核心业务系统在流量高峰期频繁出现响应延迟,但常规监控指标(CPU、内存、磁盘IO)均显示正常。经过两周的无效排查后,我们决定实…

2026/7/27 6:27:17阅读更多 →
WordAI自定义按钮功能:提升写作效率的智能快捷键

WordAI自定义按钮功能:提升写作效率的智能快捷键

1. 项目概述:WordAI自定义按钮功能详解作为一名长期与Word文档打交道的文字工作者,我一直在寻找能够提升写作效率的智能工具。HAWK Word AI插件的最新自定义按钮功能彻底改变了我的工作流程——现在我可以直接在Word里创建专属的AI指令按钮,就…

2026/7/27 6:27:17阅读更多 →
三国杀自由之旅:如何在浏览器中开启你的策略对决新纪元

三国杀自由之旅:如何在浏览器中开启你的策略对决新纪元

三国杀自由之旅:如何在浏览器中开启你的策略对决新纪元 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 想象一下,无需安装任何软件,只需一个浏览器,你就能随时开启一场精彩的三国杀对…

2026/7/27 6:27:17阅读更多 →
2026学术写作工具全解析与高效组合方案

2026学术写作工具全解析与高效组合方案

1. 2026年学术写作工具全景观察刚完成博士论文答辩那晚,我盯着书桌上摞起的十二本工具书和电脑里二十多个写作软件安装包,突然意识到一个残酷事实:过去三年我至少浪费了800小时在工具切换和格式调整上。这促使我系统梳理了当前主流论文写作工…

2026/7/27 6:27:17阅读更多 →
如何快速创建免费WiFi热点:VirtualRouter完整指南终极教程

如何快速创建免费WiFi热点:VirtualRouter完整指南终极教程

如何快速创建免费WiFi热点:VirtualRouter完整指南终极教程 【免费下载链接】VirtualRouter Wifi Hotspot for Windows computers (Windows 7, 8.x, Server 2012 and newer!) 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualRouter 还在为多设备共享网络…

2026/7/27 6:27:17阅读更多 →
极验验证码自动化破解:从轨迹生成到JS逆向的完整实战指南

极验验证码自动化破解:从轨迹生成到JS逆向的完整实战指南

1. 项目概述:从“识别”到“模拟”的攻防思维跃迁在互联网安全攻防的战场上,验证码始终是横亘在自动化程序与正常服务之间的一道关键防线。极验验证,作为国内乃至全球范围内应用极为广泛的行为验证解决方案,以其动态的“滑动拼图”…

2026/7/27 6:25:17阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

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

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

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

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

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

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

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →