博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringIoC加载流程
阅读量:2352 次
发布时间:2019-05-10

本文共 1601 字,大约阅读时间需要 5 分钟。

IoC容器是Spring的核心模块,是抽象了对象管理、依赖关系管理的框架解决方案。

在Spring IoC容器的设计中,有两个主要的容器系列,一个是实现了BeanFactory接口的简单容器系列,这系列容器只实现了容器的最基本功能;另一个是ApplicationContext应用上下文,它作为容器的高级形态而存在,除了BeanFactory的基本功能,还提供了更多丰富的功能,常用的有ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext。

在这里插入图片描述

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

一、BeanDefinition的Resource定位(指对BeanDefinition的资源定位过程。通俗地讲,就是找到定义Javabean信息的XML文件,并将其封装成Resource对象)

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

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

二、BeanDefinition的载入和解析(把用户定义好的Javabean表示为IoC容器内部的数据结构,这个容器内部的数据结构就是BeanDefinition)

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

在这里插入图片描述

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

三、BeanDefinition在IoC容器中的注册(向IoC容器注册这些BeanDefinition)

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

转载地址:http://piwtb.baihongyu.com/

你可能感兴趣的文章
spring Cloud 组建图
查看>>
腾讯云
查看>>
什么服务器比较好?
查看>>
阿里云+腾讯云采购季优惠攻略
查看>>
PCB设计容易出错的地方都有哪些?
查看>>
挠性电路板和刚性电路板的区别,以及柔性电路板焊接方法操作步骤
查看>>
如何做好一块PCB板,大神从以下几个方面做了论述
查看>>
学习笔记1之static
查看>>
学习笔记2之继承
查看>>
循环链表实现增、删、改、查等功能
查看>>
Android实现超链接和跑马灯
查看>>
实现二叉树先序、中序、后序遍历
查看>>
Socket客户端服务器连接
查看>>
简单字符设备驱动程序的操作步骤
查看>>
视频压缩:I帧、P帧、B帧
查看>>
视频编解码基础一
查看>>
视频编码学习二
查看>>
视频处理
查看>>
Python的安装教程
查看>>
谈谈码率、帧率、分辨率和清晰度
查看>>