IOC容器
- ioc容器
ioc就是控制反转,就是将对象的创建和对象间管理管理交给Spring框架处理,我们只需要使用配置文件告诉框架对象与对象之间的关系就可以了; - 对象与对象间关系如何表示?
可以使用xml、properites文件等语义化文件表示 - 描述对象的关系的文件存放在那里?
可能是classpath(这是最常用的)、filesystem、或者网络资源url上或ServletContext中等; - 不同配置文件对对象的描述不一样,如何统一?
不同配置文件对对象描述虽然不一样,但是在Spring内部都会使用BeanDefinition来统一描述对象关系 - 如何对不同的配置文件解析?
使用不同的解析器解析不同的配置文件 - Spring框架启动过程
对象关系的配置文件有xml、properties等;
这些文件开发中绝大多数是放在项目等classpath中,当然也可以放在filesystem,网络等其他位置上;
然后spring框架通过解析器reader来读取不同的配置文件;
然后将文件中的配置信息统一解析成BeanDefinition放入BeanFactory中;
IOC容器启动
我们以ClassPathXmlApplication方式启动Spring框架,来查看Spring框架的启动过程;
1、初始化资源加载器:ResourceLoader
它的主要功能就是用来读取框架的配置文件,这些配置文件有xml的properties的等;
2、设置配置文件路径:
设置框架配置文件所在位置,即xml或properties配置文件在项目中的位置;因为它里面配置了哪些类要交给框架管理以及这些对象之间的关系;
3、刷新并启动容器:refresh()
通过这个方法来调用AbstractBeanFactory的refresh方法,来创建容器,并解析上面的配置资源文件,将Bean资源加载到容器中;
- AbstractBeanFactory:定义启动模版步骤,委派子类实现模版中的方法
创建BeanFactory,委派给子类创建(委派模式) - AbstractRefreshBeanFactory:
创建BeanFactory;
加载Bean资源BeanDefinition,委派给子类实现(委派模式) - AbstractXmlApplicationContext:
选择XmlBeanDefinitionReader来读取资源文件就是配置的xml文件(策略模式);
- XmlBeanDefinitionReader:
获取第二步xml配置文件位置,交给第一步配置的资源加载器成统一的资源,然后该类解析资源加载器中的资源生成Document对象;
然后交给BeanDefinitionDocumentReader解析Document对象成Bean资源
- BeanDefinitionDocumentReader:
该类将Document对象解析成BeanDefinition对象;
然后将调用工具类BeanDefinitionReaderUtil将Bean资源放入创建好的BeanFactory中;
- BeanDefinitionReaderUtil:
调用上面创建好的BeanFactory子类对象将Bean资源BeanDefinition放入其中;
- BeanFactory:
该类中提供了一个map集合,用来保存所有的BeanDefinition