1 介绍

创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMulticaster广播器,注册完ApplicationListener监听器后,关键一步就是创建和初始化其他非lazy-init的singleton beans。这样在容器初始化好的时候,这些singleton beans就已经创建和初始化好了,可以大大提高bean的访问效率。这个过程比较复杂,本文将详细分析整个流程。先看涉及到的关键类。

AbstractApplicationContext: 定义了spring容器初始化的大部分流程方法,子类必须遵循这个流程,但可以修改流程中的方法,典型的模板模式。bean创建的入口方法finishBeanFactoryInitialization也在这个方法中。

DefaultListableBeanFactory:一种BeanFactory容器实现,实现了ConfigurableListableBeanFactory接口

BeanDefinition:描述bean结构,对应XML中的或者注解中的@Component

AbstractBeanFactory:继承了BeanFactory容器,主要负责getBean创建Bean实例。

2 流程

2.1 finishBeanFactoryInitialization

初始化spring容器中的refresh()方法中,会调用finishBeanFactoryInitialization()方法,它是创建和初始化其他非lazy-init的s

Spring源码分析4 — spring bean创建和初始化相关推荐

  1. spring源码分析第六天------spring经典面试问题

    spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...

  2. Spring源码分析【1】-Tomcat的初始化

    org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig ...

  3. Spring源码分析-如何获取Bean对象

    导语   在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...

  4. Spring源码分析3 — spring XML配置文件的解析流程

    1 介绍 创建并初始化spring容器中,关键一步就是读取并解析spring XML配置文件.这个过程比较复杂,本文将详细分析整个流程.先看涉及到的关键类. XmlWebApplicationCont ...

  5. 【Spring源码分析系列】bean的加载

    前言 以 BeanFactory bf  = new XmlBeanFactory(new ClassPathResource("beans.xml"));为例查看bean的加载过 ...

  6. spring源码分析之spring jmx

    JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...

  7. spring源码分析之spring注解@Aspect是如何工作的?

    AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程. AOP ...

  8. Spring源码分析(三)

    Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...

  9. Spring源码分析——汇总全集

    文章目录 一.背景 二.源码分析目录 三.源码番外篇(补充) 更新时间 更新内容 备注 2022-04-01 Spring源码分析目录和计划 2022-04-10 Spring源码分析一:容器篇-re ...

最新文章

  1. C库函数-perror()
  2. 20145235李涛《网络对抗》Exp2 后门原理与实践
  3. ubuntu 鼠标变成黑色的叉并且图标消失
  4. oracle并行收集统计信息慢,Oracle 学习之性能优化(四)收集统计信息
  5. php键盘输入函数,php的常用输入语句以及常用函数
  6. WCF Rest Service
  7. PCL学习(4)——octree
  8. 324. Wiggle Sort II
  9. MMP,我说每年年会我怎么老是中不了奖,原来是这样
  10. prn文件导入Matlab,PPP_code(Matlab) GPS精密单点定位中的周跳探测与修复的算法研究代码 GPS develop 238万源代码下载- www.pudn.com...
  11. 关于bat安装与卸载服务脚本
  12. 桌面创建快捷方式 不显示图标
  13. 连接服务器框架协议通信,通信服务协议范本3篇.doc
  14. Nodejs pm2 使用
  15. 网络打印机计算机服务,在Windows7中添加网络打印机的解决方案提示“本地打印机后台处理程序服务未运行”...
  16. Scala——面向对象和函数式编程语言
  17. 看历史杂志看历史杂志社看历史编辑部2022年第5期目录查阅
  18. 《围城》读后感:你的心是一座城,愿你城中有幸福
  19. QT根据父窗口子窗口自适应大小
  20. php单例是什么意思,什么是PHP单例模式?

热门文章

  1. Python 的元类设计起源自哪里?
  2. 程序猿养娃的日常(#0)
  3. python 内置函数 builtins_如何查看 Python 全部内置变量和内置函数?
  4. 二维码的特征定位和信息识别
  5. (转)分享一下,我常去的中文技术网站
  6. centos nmtui 使用_CentOS7使用nmtui和nmcli配置网络
  7. Mobox企业文件共享平台—企业的数据管理解决之道
  8. 安装一个Excel插件,轻松网罗50+主流数据库
  9. 在Excel2003中,用A表示第1列,B表示第2列。。。Z表示第26列,AA表示第27列,AB表示第28列。。。以此类推。请写出一个函数,输入用字母表示的列号编码,输出它是第几列
  10. Bonjour_mDNS_笔记