zoukankan      html  css  js  c++  java
  • IoC容器初始化过程

    本文主要摘录于  Spring技术内幕-深入即系Spring架构和设计原理(许文柯著)。

    IoC容器的初始化包括BeanDefinition的Resource定位、载入和注册三个基本过程。

    一、BeanDefinition的Resource定位

     还是以FileSystemXmlApplicationContext为例,上图表示了它的继承关系,可以看出它间接继承了DefaultResourceLoader类,因此具备了ResourceLoader读入以Resource定义的BeanDefinition的能力。IoC容器的初始化是从它的构造函数中的refresh方法开始的。

    refresh方法调用AbstractRefreshableApplicationContext里的refreshBeanFactory方法,通过createBeanFactory构建了一个IoC容器供ApplicationContext使用,这个容器其实就是DefaultListableBeanFactory。同时启动loadBeanDefinitions来载入BeanDefinition,在AbstractBeanDefinitionReader里面找到合适的ResourceLoader解析Resource。这就是BeanDefinition的Resource定位。

    二、BeanDefinition的载入和解析

     上文中说到AbstractRefreshableApplicationContext类中refreshBeanFactory方法,启动loadBeanDefinitions来载入BeanDefinition,第一步获得XmlBeanDefinitionReader对象,然后再调用loadBeanDefinitions方法,源码如下:

    实际上就是通过XmlBeanDefinitionReader对象去载入和解析BeanDefinition,最后通过BeanDefinitionParserDelegate去解析XML。这个时候容器还没有完全起作用,最后还需完成数据向容器的注册。

    三、BeanDefinition在IoC容器中的注册

    跟踪代码,注册其实就是调用DefaultListableBeanFactory里面的registerBeanDefinition方法,本质上是通过HashMap来持有载入的BeanDefinition,即DefaultListableBeanFactory中的beanDefinitionMap。完成了BeanDefinition的注册,就完成了IoC容器的初始化过程。此时,在使用的IoC容器DefaultListableBeanFactory中已经建立了整个Bean的配置信息,而且这些BeanDefinition已经可以被容器使用了。容器的作用就是对这些信息进行处理和维护,这些信息是容器建立依赖反转的基础。

  • 相关阅读:
    java使用Websocket获取HttpSession出现的问题与解决
    java 静态导入 小结
    【编程思想笔记】内部类的初始化
    【搬运】Tea算法Java实现工具类
    OBS studio最新版配置鉴权推流
    debian 9 双显卡安装NVIDIA显卡驱动
    【学习笔记】Java finalize()的使用
    【学习笔记】js下拉刷新、上拉加载 mescroll框架的使用
    [随笔] 简单操作解决Google chrome颜色显示不正常的情况
    【自制工具类】struts返回json数据包装格式类
  • 原文地址:https://www.cnblogs.com/rayallenbj/p/9527114.html
Copyright © 2011-2022 走看看