spring的aop动态代理对象注入时机

bean生命周期:

  1. bean实例化
  2. populateBean填充属性
  3. invokeAwareMethods调用aware方法
  4. postProcessBeforeInitialization后置处理器before方法
  5. initializeBean初始化bean
  6. postProcessAfterAfterInitialization后置处理器after方法

代理对象注入有两种情况:提前和非提前生成代理对象

1. 非提前生成代理对象

依赖于beanPostProcessor实现,具体实现类是AnnotationAwareAspectJAutoProxyCreator的postProcessAfterInitialization()方法。

2. 提前生成代理对象

为解决循环依赖,依赖于三层缓存,singletonObject,earlySingletonObject,singletonFactories:

为什么需要二级缓存:为了防止 A依赖B、C,B依赖A,C依赖A这种情况,重复获取 (https://www.zhihu.com/question/501359984

为什么三级缓存不直接存半成品的SingletonObject(而是存的ObjectFactory):为了支持注入代理对象(https://www.zhihu.com/question/501359984

!! 不行,因为假如你想对添加到三级缓存中的实例对象进行增强,直接用实例对象是行不通的。针对这种场景spring是怎么做的呢?

它定义了一个匿名内部类,通过getEarlyBeanReference方法获取代理对象,其实底层是通过AbstractAutoProxyCreator类的getEarlyBeanReference()生成代理对象。

相关推荐
Hello.Reader几秒前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
WarPigs5 分钟前
Windows IIS开启和配置服务器
运维·服务器
原来是猿8 分钟前
Linux UDP Socket 编程入门:Echo Server/Client实现
linux·运维·udp
中微子10 分钟前
突然爆火的Warp 终端,开源1天破 4w Stars
linux·人工智能·开源
半斤八两21111 分钟前
个人服务器发送消息至飞书
服务器
pengyi87101535 分钟前
共享 IP 池多人使用 分层权限与配额管理方案
运维·服务器·网络
计算机安禾38 分钟前
【Linux从入门到精通】第33篇:数据库MySQL/MariaDB安装与基础调优
linux·数据库·mysql
搞科研的小刘选手1 小时前
【高届数传感机电会议】第十二届传感器、机电一体化和自动化系统国际学术研讨会(ISSMAS 2026)
运维·人工智能·自动化·控制·传感器·传感·机电
楼兰公子1 小时前
读取rpi摄像头
linux·服务器·算法
李景琰1 小时前
Debian12安装配置Mqtt之EMQX
linux·运维·服务器