spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用。

@Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.准备刷新context
            prepareRefresh();// Tell the subclass to refresh the internal bean factory.刷新子类beanFactory,注册beanDefinitionConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context.准备beanfactory
            prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory);// Initialize message source for this context.
                initMessageSource();// Initialize event multicaster for this context.
                initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.
                onRefresh();// Check for listener beans and register them.
                registerListeners();// Instantiate all remaining (non-lazy-init) singletons.初始化非懒加载的bean实例
                finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.
                finishRefresh();}catch (BeansException ex) {logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);// Destroy already created singletons to avoid dangling resources.
                destroyBeans();// Reset 'active' flag.
                cancelRefresh(ex);// Propagate exception to caller.throw ex;}}}

实例化bean对象,主要的是在

finishBeanFactoryInitialization(beanFactory)

方法。
大致的流程图(下部分):

(点击查看大图)

下面分析实例化bean对象的源码分析

加载bean对象:

在AbstractBeanFactory类中,根据不同scope进行实例化,例如Singleton,Prototype等

根据不同情况采用不同的代理方式:

到这里就是bean实例的初始化,可以看到spring采用的代理方式,来实现bean的初始化。

转载于:https://www.cnblogs.com/lzeffort/p/7669150.html

Spring源码解析-实例化bean对象相关推荐

  1. Spring源码阅读之bean对象的创建过程

    Spring源码阅读之bean对象的创建过程 ​ Spring是通过IOC容器来管理对象的,该容器不仅仅只是帮我们创建了对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.这种方式成为控制反转 ...

  2. Spring源码解析(五)-Bean的实例化流程(上)

    在前面已经完成了对需要实例化bean的收集并封装成BeanDefinition,并且将BeanPostProcess等组件进行了提前实例化.接下来就到了容器启动的最后一步,也是最复杂的一步-实例化be ...

  3. Spring源码解析(七)-Bean属性间的循环依赖

    首先复习一下前面学习的Spring容器启动的大致流程,首先Spring会先扫描所有需要实例化的Bean,将这些Bean的信息封装成一个个BeanDefinition,然后注册到BeanDefiniti ...

  4. Spring源码解析之bean的销毁

    阅读须知 Spring源码版本:4.3.8 文章中使用/* */注释的方法会做深入分析 正文 我们来看几个销毁bean的场景,在一些异常情况,例如Spring上下文初始化失败时,会销毁已经创建的单例b ...

  5. Spring源码解析之 Bean与BeanDefinition详解

    文章目录 Spring解决的核心问题 Bean与BeanDefinition 代码验证BeanDefinition 代码运行测试 Spring容器主要流程 与BeanDefinition相关的类 At ...

  6. Spring源码解析:自定义标签的解析过程

    2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...

  7. Spring源码解析-bean实例化

    Spring源码解析-bean实例化 ​ 本文介绍Spring创建 bean 过程中的第一个步骤:实例化 bean. 1. Bean实例化源码 ​ 虽然实例化Bean有多种方式(包括静态工厂和工厂实例 ...

  8. Spring 源码解析 - Bean创建过程 以及 解决循环依赖

    一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...

  9. 人人都能看懂的Spring源码解析,Spring如何解决循环依赖

    人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...

最新文章

  1. 存储mysql数据存在特殊字符时处理_转义 存储数据时特殊符号的处理
  2. POJ 2749 Building roads 2-sat+二分答案
  3. OpenGL硬件加速指南
  4. 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
  5. 自律到极致-人生才精致:第2期
  6. 高薪Java工程师必看的书籍
  7. 如何定期备份网站数据
  8. Regulator的下载地址
  9. Bash脚本教程之字符串操作
  10. 如何创造具有竞争性的新品类?
  11. 输入设备名输入输出设备的重定向
  12. Cadence OrCAD Capture 锁定工程和图纸图文视频教程
  13. Directx使用基础
  14. 屏幕录像专家 - 视频压缩教程
  15. 电脑版的微信客户端也能刷朋友圈啦
  16. 坐标计算距离公式 火星坐标系_地图坐标转换 -- 火星坐标与GPS坐标
  17. 数据库——实体联系模型
  18. Visual Paradigm 里什么是复合结构图?
  19. 【raft】学习五:日志结构raftLog
  20. 计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档)

热门文章

  1. python figure函数 gui_python 在一个GUI内创建了2个figure,为什么只能显示第二个图?...
  2. linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软
  3. 嵌入式linux应用程序实例,嵌入式Linux应用程序访问物理地址的实例
  4. 【WebRTC---入门篇】(六)JavaScript基础
  5. php做一个网页的源代码,用HTML5做一个个人网站此文仅展示个人主页界面。内附源代码下载地址...
  6. 将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中
  7. android math类,GitHub - Zihin/MathModeling-Android
  8. vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...
  9. html编辑器不支持自定义样式,百度编辑器自定义按钮样式问题(写在cssRules不起做用)?...
  10. 64位 regsrv win10_Win10 64位安装个人版SQL2000图文教程