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已经可以被容器使用了。容器的作用就是对这些信息进行处理和维护,这些信息是容器建立依赖反转的基础。

  • 相关阅读:
    我常用的find命令
    Linux压缩和解压汇总
    windows下bat批处理实现守护进程
    windows2003批量添加和导出所有ip
    bat批量去除文件首行和合并到文件
    windows下批量删除文件
    windows添加和删除服务
    【转】自动实时监控Windows2003服务器终端登录并发邮件和发短信通知
    设置windows网络连接别名和linux网络连接别名
    我常用的crontab命令
  • 原文地址:https://www.cnblogs.com/rayallenbj/p/9527114.html
Copyright © 2011-2022 走看看