当前位置: 首页 > news >正文

Spring AOP ‌不能拦截 protected 方法‌

Spring AOP ‌不能拦截 protected 方法‌,主要原因在于其底层代理机制的设计限制。以下是关键原因的清晰说明:

核心原因

‌Spring AOP 基于代理实现‌:无论是 JDK 动态代理还是 CGLIB 代理,都只对 ‌public 方法‌ 进行增强。
‌JDK 动态代理‌:基于接口,只能代理 public 方法(接口方法默认为 public)。
‌CGLIB 代理‌:通过继承目标类生成子类,虽然理论上可以覆盖 protected 方法,但 ‌Spring AOP 明确排除了对 non-public 方法的拦截‌,以保持行为一致性。

具体表现

在 protected 方法上使用 @Transactional 等注解时,‌事务不会生效‌,且 ‌不会抛出异常‌,只是被静默忽略 ‌
Spring 在创建代理时,会通过 AbstractFallbackTransactionAttributeSource.computeTransactionAttribute() 方法判断方法可见性,若非 public,则返回 null,导致无事务增强 ‌

  • 即使 CGLIB 生成了代理类,protected 方法进入拦截链时,‌拦截器链为空‌,因此无法应用切面逻辑 ‌
http://www.jsqmd.com/news/468341/

相关文章:

  • RISC-V WFI指令:从低功耗休眠到中断唤醒的软件实践
  • InstructPix2Pix实战:5分钟学会用AI指令编辑图片(附Stable Diffusion配置)
  • 手把手教你连接迈瑞BeneVision监护仪:从设备联网到移动端数据查看全流程
  • IoT设备防克隆方案:基于动态HMAC的UID认证系统设计
  • SAP邮件配置全攻略:从SCOT到SMTP的保姆级教程(含RZ10设置)
  • 不挨饿也能稳步瘦?2026热门减肥代餐权威测评,腰纪线助力代谢平衡实现长效控重 - 企业推荐官【官方】
  • 深圳搬家不用愁!风速达深耕全域,2026年亲测靠谱的本地搬家专家 - 企业推荐官【官方】
  • Simulink与C语言的深度对话:S-Function实战指南
  • 第五章 ISO15118-2协议分析--5.1 高效学习方法与实战技巧
  • 华为OD机考双机位C卷 - 日志解析(Java Python JS GO C++ C)
  • C语言迷你HTTP服务器实战:如何处理GET请求和静态资源
  • 广州佛山外贸网站建设案例大揭秘:2026 公司出海开发要点 - 企业推荐官【官方】
  • SQL实战:从零开始用MySQL和MariaDB搭建个人数据库(附避坑指南)
  • FPGA实战:如何用Verilog实现高效数控振荡器(NCO)?附完整代码
  • 使用Inno Setup将Qt应用打包为专业安装包的完整指南
  • 全球90米分辨率MERIT DEM数据下载与处理全攻略(附EGM96转椭球高教程)
  • 从BVH到FBX:Blender中动捕数据映射的5个实用技巧(含Mixamo模型适配指南)
  • Next.js水合错误排查指南:浏览器插件竟是罪魁祸首?
  • 不用IE也能搞定!海康威视Web3.0插件在现代浏览器中的兼容性解决方案
  • 服务器主板更换后电子标签同步工具V1.0使用指南
  • 极限求解的实用技巧与常见误区解析
  • Vue2中provide和inject的5个实战技巧,告别props层层传递
  • lxml库深度解析:etree和XPath在Python爬虫中的高效应用技巧
  • 博途AI助手实战:5分钟搞定梯形图代码自动生成(附避坑指南)
  • 用pgvector构建你的第一个向量数据库:从安装到实战查询
  • 开发者必备:10个提升技能的国外优质在线学习平台
  • 树莓派4B远程桌面终极指南:解决Wayland兼容性与无屏黑屏难题
  • ARM64服务器Python环境搭建:从TensorFlow到scikit-learn的一站式解决方案
  • MixIO云平台深度体验:用掌控板做个网页版游戏手柄(支持手机控制)
  • 高德地图JS API实战:3D数据可视化与Vue3集成指南