Spring AOP对嵌套方法不起作用的解决方法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇文章为大家展示了Spring AOP对嵌套方法不起作用的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring AOP对嵌套方法不起作用今天在
千家信息网最后更新 2025年11月08日Spring AOP对嵌套方法不起作用的解决方法
本篇文章为大家展示了Spring AOP对嵌套方法不起作用的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Spring AOP对嵌套方法不起作用
今天在调研系统操作记录日志时,好多教程都是借助于Spring AOP机制来实现。于是也采用这种方法来实现。在Service中的删除日志方法上注解自定义的切点,但是执行没有生效。
代码如下:
//尝试删除溢出日志 public synchronized void tryDelOverflowLog() { logNum++; if (logNum - LogConst.MAX_NUM > 0) { int delNum = logNum - LogConst.MAX_NUM + LogConst.EXTRA_NUM; logNum -= delNum; removeOverflowLog(delNum); } } //日志溢出后,删除最新入库的日志 @ServiceLog(type = LogConst.TYPE_LOG_RECORD, description = "操作日志缓存区溢出,系统自动清空缓存区") public void removeOverflowLog(int delNum) { custLogMapper.removeOverflowLog(delNum); }在使用 Spring AOP 的时候,我们从 IOC 容器中获取的 Service Bean 对象其实都是代理对象,而不是那些 Service Bean 对象本身,也就是说获取的并不是被代理对象或代理目标。当我在自己的 Service 类中使用 this 关键字嵌套调用同类中的其他方法时,由于 this 关键字引用的并不是该 Service Bean 对象的代理对象,而是其本身,故 Spring AOP 是不能拦截到这些被嵌套调用的方法的。
要解决这个问题
最简单的方法是把自身注入到自身,用注入的这个自身去调用本方法。或者你也可以不用spring aop而是用aspectj weaving,倒是可以测底的解决该问题。我采用的是把自身注入到自身中。
/** * 通过注入自身解决,Spring AOP嵌套调用不生效的问题 */ @Autowired private ApplicationContext applicationContext; private LogService self; @PostConstruct private void init() { self = (LogService) applicationContext.getBean("logService"); } //尝试删除溢出日志 public synchronized void tryDelOverflowLog() { logNum++; if (logNum - LogConst.MAX_NUM > 0) { int delNum = logNum - LogConst.MAX_NUM + LogConst.EXTRA_NUM; logNum -= delNum; self.removeOverflowLog(delNum); } }Spring AOP、嵌套调用失效及解决
加入注解
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
获取当前代理的接口
public interface ICurrentAopProxyService{ default T getCurrentProxyService() { return (T) AopContext.currentProxy(); }}
需要嵌套调用的Service实现它

调用的时候改写代码
public SysMerchantVersion selectByMerchantId(Long merchantId) { return getCurrentProxyService().getOne(new QueryWrapper() .lambda() .eq(SysMerchantVersion::getMerchantId, merchantId)); } 上述内容就是Spring AOP对嵌套方法不起作用的解决方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
方法
日志
对象
代理
作用
问题
代码
关键
关键字
内容
技能
时候
注解
知识
系统
而是
存区
尝试
简明
简明扼要
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
所有文本都需要从数据库获得吗
软件开发合同数据
数据库在线查询系统
玖华互联网科技有限公司
csol打游戏连接服务器失败
网络安全手抄报创意说明
数据库系统概论事务日志
电脑通过网口连服务器
可以发包的服务器
东莞订单软件开发
数据库技术英语怎么说
数字平台中心管理服务器
河师大网络安全
mysql数据库知识汇总
育碧正在处理授权数据库维护
党员教育数据库使用资格
计算机网络技术主要是由
软件开发人员属于科研人员吗
软件开发市场的行业竞争强度
云顶手游所有服务器
软件开发中模型有哪些东西
基层供电所网络安全
终端怎么退出数据库
华为助手备份微信数据库
数据库技术英语怎么说
鸿蒙系统什么软件开发的
边浙网络技术有限公司
网络安全研制
管理费用软件开发费
软件开发项目产权