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()生成代理对象。

相关推荐
片酷5 分钟前
【Isaacsim&Isaaclab】安装教程
linux·开发语言·python
Magic@10 分钟前
Redis学习[1] ——基本概念和数据类型
linux·开发语言·数据库·c++·redis·学习
microxiaoxiao13 分钟前
Aeroshell:2026 年,支持AI的SSH 终端
运维·人工智能·ssh
大腕先生13 分钟前
通用分页超详细介绍(附带源代码解析&页面展示效果)
xml·java·linux·服务器·开发语言·前端·idea
feng145616 分钟前
稳定性-风险文化建设和风险意识培养
运维·人工智能
红茶要加冰24 分钟前
如何安装ubuntu-24.04-live-server-amd64系统
linux·运维·ubuntu
念恒1230638 分钟前
进程控制---进程等待
linux·c语言
feng14561 小时前
稳定性-资金安全和资损防控
运维·网络·安全
cen__y1 小时前
Linux05(管道)
linux·运维·服务器·c语言·开发语言·文件流
蛐蛐蛐1 小时前
在Windows 11上安装Docker的踩坑记录
运维·docker·容器