当Bean 定义资源被载入IOC 容器之后, 容器将Bean 定义资源解析为容器内部的数据结构BeanDefinition 注册到容器中,AbstractApplicationContext 类中的finishBeanFactoryInitialization()方法对配置了预实例化属性的Bean 进行预初始化过程,源码如下:

//对配置了lazy-init属性的Bean进行预实例化处理
protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {// Initialize conversion service for this context.//这是Spring3以后新加的代码,为容器指定一个转换服务(ConversionService)//在对某些Bean属性进行转换时使用if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&beanFactory.isTypeMatch(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class)) {beanFactory.setConversionService(beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));}// Register a default embedded value resolver if no bean post-processor// (such as a PropertyPlaceholderConfigurer bean) registered any before:// at this point, primarily for resolution in annotation attribute values.if (!beanFactory.hasEmbeddedValueResolver()) {beanFactory.addEmbeddedValueResolver(strVal -> getEnvironment().resolvePlaceholders(strVal));}// Initialize LoadTimeWeaverAware beans early to allow for registering their transformers early.String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false);for (String weaverAwareName : weaverAwareNames) {getBean(weaverAwareName);}// Stop using the temporary ClassLoader for type matching.//为了类型匹配,停止使用临时的类加载器beanFactory.setTempClassLoader(null);// Allow for caching all bean definition metadata, not expecting further changes.//缓存容器中所有注册的BeanDefinition元数据,以防被修改beanFactory.freezeConfiguration();// Instantiate all remaining (non-lazy-init) singletons.//对配置了lazy-init属性的单态模式Bean进行预实例化处理beanFactory.preInstantiateSingletons();
}

ConfigurableListableBeanFactory 是一个接口, 其preInstantiateSingletons() 方法由其子类DefaultListableBeanFactory 提供。

finishBeanFactoryInitialization 处理预实例化Bean相关推荐

  1. DefaultListableBeanFactory 对配置lazy-init 属性单态Bean 的预实例化

    //对配置lazy-init属性单态Bean的预实例化 @Override public void preInstantiateSingletons() throws BeansException { ...

  2. Spring源码之@Lazy和预实例化

    https://www.cnblogs.com/yanze/p/10243348.html 懒加载优缺点 优点:懒加载,对象使用的时候才去创建:启动速度快,节省资源 缺点:不利于提前发现错误:初次请求 ...

  3. Spring解析,加载及实例化Bean的顺序(零配置)

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 作者:jb_hz blog.csdn.net/qq_2752 ...

  4. Spring源码解析-实例化bean对象

    spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用. @Overridepublic void refresh() throws Be ...

  5. 实例化Bean的方法(基于xml配置)-http://blog.csdn.net/shymi1991/article/details/48153293

    实例化Bean的方法(基于xml配置) 标签: spring framework 2015-09-01 13:43 918人阅读 评论(0) 收藏 举报  分类: Spring FrameWork(7 ...

  6. Spring2.5.6学习笔记-实例化bean的几种方法

    1. 用构造器来实例化 <bean id="exampleBean" class="examples.ExampleBean"/> <bean ...

  7. java 实例化 bean,Spring(02)——bean实例化

    2 bean的实例化 2.1 构造方法实例化 bean的实例化默认是通过构造方法进行的,在未指定构造方法参数的情况下,默认会通过无参构造方法来进行bean的实例化.如下这种就是通过无参构造方法进行实例 ...

  8. 【死磕 Spring】—– IOC 之 Factory 实例化 bean

    这篇我们关注创建 bean 过程中的第一个步骤:实例化 bean,对应的方法为: createBeanInstance(),如下: protected BeanWrapper createBeanIn ...

  9. Spring BeanFactory实例化Bean的过程

    Spring BeanFactory实例化Bean的过程 Bean的实例化是Bean生命周期的一个非常重要的环节,一般来说,初始化后,就不再改变了,直到bean被从BeanFactory中显式的移除. ...

最新文章

  1. mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间
  2. 2018年薪资最高的15个技术岗
  3. 32位汇编编程模板--使用masm6.15环境
  4. 固态硬盘市场或将提前爆发
  5. Tomcat6下使用jBPM-4出现 java.lang.LinkageError。javax/el/ExpressionFactory解决办法
  6. 的电路接法_放大电路的三种基本接法分享
  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次
  8. Oracle数据库LOGGINGNOLOGGING模式概述
  9. 如何查找SAP Cloud for Customer UI页面对应的技术模型明细
  10. 漫画:什么是时间复杂度
  11. redis学习-redis事务
  12. Java开发十二大框架
  13. Divide by Zero 2021 and Codeforces Round #714 (Div. 2)B. AND Sequences(位运算 + 思维 + 排列)
  14. 直角坐标系转球坐标系 Equirectangular 理解 代码 Unity
  15. 加解密后字节数组和(16进制)字符串的相互转换问题
  16. apple关闭双重验证_Apple安全浏览说明-Apple为什么将您的数据发送给Google和腾讯,以及如何将其关闭
  17. 深入类加载器-类加载器作用,类缓存、类加载器的层次结构、ClassLoader类介绍、代理模式之双亲委派机制
  18. 学ios 需要学html5me,针对iOS平台移植Flash内容的指导教程(1)
  19. EDONG:助力中大型企业数字化转型
  20. ajax请求怎么实现跨域

热门文章

  1. java程序员面试中的5个杀手锏问题
  2. Selenium + Grid + Testng并发运行用例
  3. vscode Python 运行环境配置
  4. Vue 添加外部的时间插件不触发v-model事件更改数据
  5. Linux 下面安装nodejs
  6. Spring框架学习笔记(2)——IOCDI
  7. 使用ImageMagick 在图片上绘制粗斜体的中文也许是一个错误。
  8. IOS 控件 - Swift 集成 IOS 自带 API 扫描二维码
  9. ready与load的区别
  10. 《论语》读后颜渊第十二主要大意