Spring IOC对Bean的装载过程与Bean的实例化过程

一、Bean装载过程

1、第一步是加载Bean配置文件

Xml默认读取器类(XmlBeanDefinitionReader)加载配置Bean定义的配置文件。

2、第二步是解析Bean配置文件

由默认的文档读取器类(DefaultBeanDefinitionDocumentReader)对已经加载Bean的配置文件进行解析,接着解析成Element对象,依据每个Element对象解析处理Bean的配置属性(id、class、懒加载、单例/多例、init、销毁等相关配置Bean属性)。

3、第三步是注册到Spring的IOC容器中

由BeanFactory类(DefaultListableBeanFactory)对Bean的class属性反射机制以及其他属性来构建Bean对象来注册到IOC容器中。

相关Spring Bean的加载过程:

http://www.manongjc.com/article/112368.html

https://www.cnblogs.com/bj-xiaodao/p/10777396.html

二、Bean的获取与创建(实例化)过程

 1、实例化uBean的4种方式

(1)使用构造器实例化

(2)使用静态工厂方式实例化

(3)使用实例工厂方法实例化

(4)使用setter方式实例化

相关链接

https://www.jianshu.com/p/646c1f657144

2、创建Bean的过程

(1)首先从 getBean() 方法开始创建过程,getBean()有一系列的重载方法,最终都是调用doGetBean() 方法。

(2)先尝试判断创建的这个Bean是否单例,如果是单例,再次判断缓存中是否存在这个Bean实例,存在就直接从缓存中获取这个Bean,通过getSingleton()方法尝试从缓存中获取单例bean。

(3)如果创建的这个Bean是多例,或者是单例并且在缓存中没有,这时候执行创建Bean的doCreateBean()方法。

(4)执行doCreateBean()方法,并由createBeanInstance()方法创建Bean。

(5)createBeanInstance()方法使用反射实例化Bean,最后执行populateBean()方法主要给 Bean 填充依懒与属性的注入。

图解

相关链接

https://blog.csdn.net/laravelshao/article/details/82318063

原文地址:https://www.cnblogs.com/c-xiaohai/p/12501467.html