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

孙哥Spring源码第20集

第20集 refresh()-invokeBeanFactoryPostProcessor 四-处理@Configuration下的@Bean生成代理对象

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、二行InvokeBeanFactoryPostProcessors的作用

image-20230513111435210 image-20230513112024591

registryProcessors:处理的是手动添加和自动注解
regularPostProcessors:在这里的话 只会处理手动添加的 不会处理非注解添加的。
其实正常情况下是 只会调用ConfiguraitonClassPostProcessor的postProcessBeanFactory

2、为什么要对@Configuration修饰的配置bean创建代理?为啥两个user一样?

image-20230513094811544

1、因为要获取Spring中所有以@Configuration注解所修饰的@Bean
2、把配置@Bean的BeanDefinition进行替换,替换成代理类型这样可以根据@Bean的配置去生成对应的BeanDefinition。

image-20230513222220858

3、InvokeBeanFactoryPostProcessors到底创建对象了吗

没有,创建对象是在后面,这里只是处理@Configuration下的@Bean

4、ImportAwareBeanPostProcessor的作用

作用:可以获取@Configuration下的@Import的A类,importMetadata就是A.class。

image-20230513103822955

5、为啥其他BeanPostProcessor是在this()创建Reader的时候创建的?而ImportAwareBeanPostProcessor是在这个地方呢?

ConfigurationClassPostProcessor对相应@Import类进行了解析,所以对@Import也放在了这个里面来处理。
前面把@import都处理完了,在ImportAwareBeanPostProcessor这个地方会更加安全,因为它已经知道@Import已经处理完了。

6、总结

image-20230514011033826
  • 主要讲了两个InvokeBeanFatoryPostProcessor的作用,其实正常情况下你不手动添加或者注解添加BeanFactoryPostProcessor一般只会调用ConfiguraitonClassPostProcessor的postProcessBeanFactory
  • 第一个invokeBeanFactoryPostProcessors:处理的处理的是registryProcessors手动添加的和注解添加的BeanFactoryPostProcessor以及它的子接口BeanDefinitionRegistryPostProcessor
  • 第二个invokeBeanFactoryPostProcessors:在这里的话 只会处理regularPostProcessors意思就是手动添加的BeanFactoryPostProcessor不会处理非注解添加的。
    • 什么是手动添加的?
    • image-20230514011509852
  • 其实正常情况下是 只会调用ConfiguraitonClassPostProcessor的postProcessBeanFactory
    • 接下来就是 找到@Configuartion下的所有@Bean,
    • 接着就是使用Cglib生成代理
    • 这就是为什么@Bean里面明明是new的,但是获取多次还是同一个对象的原因。
http://www.lryc.cn/news/160518.html

相关文章:

  • 【计算机网络】HTTP(上)
  • Maven学习记录
  • H5游戏开发H5休闲小游戏定制H5软件定制
  • Spring基础及IoC容器的理解
  • 护网行动为什么给的钱那么多
  • 软考知识汇总-计算机系统
  • OpenCV 11(图像金字塔)
  • Linux学习笔记-Ubuntu系统用户、群组、权限管理
  • 文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips
  • Nand Flash的特性及烧录问题
  • 【React 】useLayoutEffect 和 useEffect的区别
  • oracle数据库常见的优化步骤与脚本
  • 并发内存池(C++)
  • 本地起一个VUE 前端项目
  • Python爬虫:Selenium的介绍及简单示例
  • 每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题
  • python循环遍历字典: title_content_list.append([key, value])print(ti
  • Redis List类型命令 - Set类型命令 - SortedSet类型命令
  • 等级保护 —— 安全控制点,安全要求
  • nginx-缓存
  • layui使用富文本已经使用第三方插件Kz.layedit来优化layui的富文本
  • 某公司二面面试题总结
  • Ubuntu编译运行socket.io
  • h5开发网站-页面内容不够高时,如何定位footer始终位于页面的最底部
  • 手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】
  • Support for password authentication was removed on August 13, 2021 解决方案
  • MPP 与 SMP 的区别,终于有人讲明白了【文末送书】
  • 华为OD机试真题【寻找最大价值的矿堆】
  • Java Maven 项目读取项目版本号
  • Lesson4-1:OpenCV图像特征提取与描述---角点特征