• 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

  • 相关阅读:
    linux三剑客之grep
    MySQL练习(1)
    appium获取toast方法
    Could not parse UiSelector argument: 'XXX' is not a string 错误解决办法
    基于python的几种排序算法的实现
    生成allure测试报告之后,服务器端口无法访问查看生成的report,可能是这样引起的。
    通过源码看原理之 selenium
    如何查看浏览器记住的密码
    传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作
    SQLServer数据库表架构和数据保存成sql文件
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/12501467.html
Copyright © 2020-2023  润新知