• 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

  • 相关阅读:
    Java线程状态和关闭线程的正确姿势
    Eclipse最全的编码设置
    Maven中的src/test/java颜色不正常
    web.xml 各版本的 Schema 头部声明
    程序员面试系列
    几款强大的网页生成工具
    endnoteX9批量导入enw
    关于Ubuntu16.04里安装elasticsearch-head显示集群健康值未连接的问题
    U盘做了系统盘,写入如硬盘映像过程中终止,怎么格式化硬盘重新写入?
    使用jupyter notebook出现kernel error
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/12501467.html
Copyright © 2020-2023  润新知