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

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()生成代理对象。
请添加图片描述

http://www.lryc.cn/news/121430.html

相关文章:

  • idea集成svn
  • RedisDesktopManage
  • 《Vue.js实战》——基础篇(1)
  • R语言 列表中嵌套列名一致的多个数据框如何整合为一个数据框
  • PyQt5利用QTextEdit控件输入多行文本
  • 【数据结构】二叉树常见题目
  • 树莓派使用 ENC28J60
  • 跟我学C++中级篇——模板友元的应用
  • 软件测试基础篇——MySQL
  • FreeRTOS(二值信号量)
  • leetcode面试题:动物收容所(考查对队列的理解和运用)
  • 【Linux命令行与Shell脚本编程】第十八章 文本处理与编辑器基础
  • 2023牛客暑期多校训练营7
  • centos7升级glibc2.28
  • 腾讯云香港服务器租用_2核2G20M_2核4G30M
  • 十三、ESP32PS2摇杆(ADC)
  • 网络安全的相关知识点
  • 算法练习(6):牛客在线编程06 递归/回溯
  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例
  • MySQL多表关联查询
  • flutter开发实战-CustomClipper裁剪长图帧动画效果
  • CSS 中的优先级规则是怎样的?
  • 概率图模型(Probabilistic Graphical Model,PGM)
  • Oracle 知识篇+会话级全局临时表在不同连接模式中的表现
  • MySQL 数据库文件的导入导出
  • 找不到资产文件project.assets.json
  • 【python】python将json字符串导出excel | pandas处理json字符串保存为csv
  • opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()
  • 分布式系统理论
  • Gartner发布2023年的存储技术成熟曲线