Spring源码阅读(二)—IOC容器初始化

本文深入探讨了Spring IOC容器的初始化过程,包括读入XML资源文件、获取Document对象、解析Document创建BeanDefinition以及注册BeanDefinition。初始化主要涉及DefaultListableBeanFactory、XmlBeanDefinitionReader,通过解析XML配置文件生成BeanDefinition并存储在BeanFactory中,但未进行依赖注入。
摘要由CSDN通过智能技术生成

Spring源码阅读(二)—IOC容器初始化

IOC控制反转是指在传统面向对象的系统中,合作对象的创建和管理由具体的业务对象完成,而如果能够把控制权从具体的对象转交给平台或者框架中,可以极大的降低面向对象系统设计复杂性,这种对象依赖关系控制权的转移就成为控制反转.

IOC容器的初始化(Bean载入)和容器依赖注入是两个相对独立的过程,容器的初始化只是将XML配置文件中Bean的信息装载到承载类BeanDefinition中不处理具体的依赖注入.

个人主页:tuzhenyu’s page
原文地址:Spring源码阅读(二)—IOC容器初始化

初始化原始容器主要是指通过对XML配置文件进行解析,将解析处理出来的bean装载到容器中。初始化主要包括以下四步:

  • 读入XML资源文件

  • 从资源文件中获取Document对象

  • 解析Document创建BeanDefination实例

  • 注册BeanDefinations

(一) 容器的初始化入口

  • ApplicationContext实现容器的初始化,ApplicationContext实现容器的初始化是调用BeanFactory。

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  • XMLBeanFactory实现容器的初始化,XMLBeanFactory实现容器初始化的原理是调用DefaultListableBeanFactory类和

XmlBeanDefinitionReader类。


BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
  • DefaultListableBeanFactory实现容器的初始化

    • 读入XML配置文件,创建IOC配置资源。

    • 创建一个BeanFactory,这里使用DefaultListableBeanFactory进行实例化。

    • 创建一个载入BeanDefinition的读取器,绑定BeanFactory实力。

    • 将XML配置文件解析成一个一个Bean的承载类BeanDefinition,并注册进BeanFactory。


Resource resource = new ClassPathResource("applicationContext.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);

(二) 读入XML资源文件

  • 将Resource通过EncodedSource类进行封装,放回EncodedSource对象实例。目的是考虑到Resource随中可能存在编码要求的情况。



public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {
    return this.loadBeanDefinitions(new EncodedResource(resource));
}
  • 将EncodedSource对象实例抽取InputStream封装进InputSource类对象中,调用doLoadBeanDefinitions()方法开始解析。



public int loadBeanDefinitions(EncodedResource encodedResource) throws BeanDefinitionStoreException {
    Assert.notNull(encodedResource, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值