一、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