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

Spring AOP拦截失败

内部方法调用绕过AOP

  • 代码
  • 问题分析
  • 解决

代码

使用AOP拦截不到注解标注的方法

public UserRequirement createOrupdate(UserRequirement userRequirement) {if(null == userRequirement.getId()){return this.create(userRequirement);}return this.update(userRequirement);}@UpdateFieldLogpublic UserRequirement update(UserRequirement userRequirement) {//………………………………return returnUserRequirement;}

问题分析

核心问题:this自调用导致代理失效

Spring AOP的实现原理是 基于代理的增强,而通过this关键字进行的内部调用会直接调用目标对象的原始方法,绕过了代理对象,导致切面无法拦截。这是Spring AOP的固有局限性。

解决

通过代理对象调用

public UserRequirement createOrupdate(UserRequirement userRequirement) {if(null == userRequirement.getId() ){return this.create(userRequirement);}return getProxy().update(userRequirement);
}private UserRequirementService getProxy() {return (UserRequirementService) AopContext.currentProxy();
}
http://www.dtcms.com/a/205284.html

相关文章:

  • Spring IOCDI————(2)
  • 如何提灯验车
  • Android13 wifi设置国家码详解
  • 全球机电气缸市场深度洞察:技术驱动与产业升级下的增长机遇(2025-2031)
  • 面试相关的知识点
  • mmaction2——tools文件夹下
  • 从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
  • 深入浅出理解时间复杂度和空间复杂度
  • 学习黑客了解密码学
  • UML 活动图 (Activity Diagram) 使用案例
  • 【Java高阶面经:微服务篇】8.高可用全链路治理:第三方接口不稳定的全场景解决方案
  • 【C++】模板下(泛型编程)
  • java面试每日一背 day1
  • 深入解析应用程序分层及 BaseDao 的封装策略
  • 操作系统 第四章 -2
  • 2025上半年软考准考证打印入口已开放!
  • 黑色矩形大于6识别
  • 编程技能:字符串函数09,strncmp
  • Base64加密解密
  • C++:array容器
  • 十七、面向对象底层逻辑-MessageSource接口设计
  • 野火RK3588部署yolov8
  • html模板-源码免费下载-html通用模板-html建站模板
  • 大模型时代,Python 近红外光谱与 Transformer 模型:学习的必要性探究
  • 跨部门项目管理优化:告别邮件依赖
  • C++核心编程_初始化列表
  • 半导体器件
  • Linux权限
  • 搭建人工智能RAG知识库的主流平台与特点概述
  • 苍穹外卖05 Redis常用命令在Java中操作Redis_Spring Data Redis使用方式店铺营业状态设置