Spring-IoC容器初始化

Spring Ioc容器

IoC容器最主要是对Bean对象的创建和依赖管里注入,是整个Spring IoC功能的核心

基本结构

Spring IoC结构很复杂,多个类继承实现关系混乱,但最基础的有三个
- BeanFactory,对IoC容器的基本行为做出了定义
这里写图片描述
- BeanDefinition,在IOC中可识别Bean资源文件的描述
这里写图片描述
- BeanDefinitionReader,加载Bean资源文件
这里写图片描述

Ioc容器初始化过程

这里举两个简单的例子

XmlBeanFactory容器

一个较为低级的IoC容器,实现了最基本的功能

//根据Xml配置文件创建Resource资源对象,该对象中包含了BeanDefinition的信息
 ClassPathResource resource =new ClassPathResource("application-context.xml");
//创建DefaultListableBeanFactory
 DefaultListableBeanFactory factory =new DefaultListableBeanFactory();
//创建XmlBeanDefinitionReader读取器,用于载入BeanDefinition。之所以需要BeanFactory作为参数,是因为会将读取的信息回调配置给factory
 XmlBeanDefinitionReader reader =new XmlBeanDefinitionReader(factory);
//XmlBeanDefinitionReader执行载入BeanDefinition的方法,最后会完成Bean的载入和注册。完成后Bean就成功的放置到IOC容器当中,以后我们就可以从中取得Bean来使用
 reader.loadBeanDefinitions(resource);

ApplicationContext容器

更为高级的IoC容器,除基本功能外,还支持信息源,可以实现国际化、访问资源和支持应用事件
因具体涉及的源代码很多,原理也较难解释清除,故只列出最基本的流程

ApplicationContext application = new FileSystemXmlApplicationContext(xmlPath);
            ↓
父类AbastractRefreshableConfigApplicationContext为容器设置Bean资源加载器
            ↓
资源加载器resourceLoader被赋值,设置资源文件路径,然后对资源文件路径进行解析
            ↓
调用refresh()方法,这是IoC容器初始化的入口
            ↓
创建IoC容器,子类启动载入过程;ConfigurableListableBeanFactory beanFactory = obtainBeanFactory();
            ↓
创建DefaultListableBeanFactory对象,装载beanFactory对象loadBeanDefinitions(beanFactory)
            ↓
新建Xml Bean读取器XmlBeanDefinitionReader对象,加载Bean资源文件
            ↓
resourceLoader.getSource(Location)获取资源
            ↓
加载Bean配置文件,对xml进行解析成Document对象
            ↓
按照Spring IoC识别的Bean规则在DefaultDefinitionDocumentReader中对Document对象进行解析
            ↓
解析文件的<Import>、<Alias>、<property>、<List>、<Set>等元素,Bean资源文件最终被解析成BeanDefinition对象,是资源原件在IoC中的映射
            ↓
BeanDefinition在IoC容器中进行注册

至此,Bean资源文件中配置的bean被解析成可以被IoC容器识别的对象且被注册管理起来,IoC容器可以进行索引、查询以及操作;被IoC容器管理起来后,也真正完成了IoC容器的初始化

注意

IoC容器中的注册就是维护了一个HashMap,保存了BeanDefinition对象,方便了后续的管理

困了Orz

从开始看到现在,四个多小时了,中间还喝了半瓶红葡萄酒,算是对Spring IoC容器的初始化了解了,明天再看AOP,现在真是困了…
睡觉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值