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

Spring的AOP在什么场景下会失效?

SpringAOP是通过动态代理实现的,所以想要AOP生效就是需要动态代理生效,并且可以提前调用到代理对象的方法。

什么情况下会不走动态代理呢?

首先就是类内部的调用,比如一些私有方法的调用,内部类调用,以及同一个方法的自调用等。如:


//1
public class MyService {public void doSomething() {doInternal(); // 自调用方法}public void doInternal() {System.out.println("Doing internal work...");}
}//2
public class MyService {public void doSomething() {doInternal(); // 自调用私有方法}private void doInternal() {System.out.println("Doing internal work...");}
}//3
public class OuterClass {private class InnerClass {public void doSomething() {System.out.println("Doing something in inner class...");}}public void invokeInnerClassMethod() {InnerClass innerClass = new InnerClass();innerClass.doSomething(); // 调用内部类方法}
}

以上都是对象内部调用其他方法,就会使用原始对象调用了,不会调用到代理对象,所以代理对象会失效。

还有一种情况虽然不是对象的自调用,但是也会让动态代理失效,就是static方法,因为static方法不属于对象,属于类的。所以不能被AOP的。

还有一种情况就是被final修饰的方法,也会使AOP失效,由于AOP是通过创建代理对象来实现的,而无法对final方法进行子类化和覆盖,所以无法拦截这些方法。

所以,那么总结一下就是以下几种情况,会导致代理失效,AOP不起作用:

1、私有方法调用
2、静态方法调用
3、final方法调用
4、类内部自调用
5、内部类方法调用

http://www.xdnf.cn/news/554473.html

相关文章:

  • 贝叶斯优化+CNN+LSTM=小论文创新点
  • 物联网(IoT)智能项目全景指南:技术构架、实现细节与应用实践
  • Oracle如何解决LATCH:CACHE BUFFERS CHAINS
  • java接口自动化初识
  • 保证数据库 + redis在读写分离场景中事务的一致性
  • 985,成立人工智能学院
  • Java高频面试之并发编程-19
  • 第50天-使用Python+Qt+DeepSeek开发AI运势测算
  • 基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法
  • 当前主流的传输技术(如OTN、IP-RAN、FlexE等)
  • C++STL之string
  • 产业互联网+三融战略:重构企业增长密码
  • 人工智能+:职业技能培训的元命题与能力重构
  • Linux 正则表达式 扩展正则表达式 gawk
  • 101个α因子#8
  • Java DTO 深度解析
  • JUC编程monitor、锁膨胀以及相关关键字
  • 定时从接口下载数据到本地
  • 免费插件集-illustrator插件-Ai插件-路径尖角圆角化
  • 天然产物在食品医药美妆领域的创新应用研究
  • 图像噪声模拟
  • 安装PostgreSQL
  • 解决javafx组件缺失导致运行程序报错的问题
  • Spring Boot中的分布式缓存方案
  • PID项目---硬件设计
  • Javascript 编程基础(2)基础知识 | 2.3、语法规则
  • 操作系统----软考中级软件工程师(自用学习笔记)
  • 循环神经网络
  • 机器人编程基础---C语言中的高级特性
  • upload-labs通关笔记-第13关 文件上传之白名单POST法