【2】Ioc容器的初始化过程 --- BeanDefinition的Resource定位
1. 准备
编程式Ioc启动
|
这是手动启动ioc的流程,这是简单ioc容器,而ApplicationContext为我们提供里一系列加载不同Resources读取器的实现。但是换句话来说,ApplicationContext也是需要上述的流程,只不过它帮我们实现了,其实启动流程就在这里,和这个一样,不过是一个手动,一个自动的区别
2. 开始分析
以FileSystemXmlApplicationContext为例子
启动代码
|
在FileSystemXmlApplicationContext中无论那个构造方法,都均调用这个构造构造方法
FileSystemXmlApplicationContext构造方法
|
AbstractApplicationContext.refresh方法
|
AbstractApplicationContext.obtainFreshBeanFactory
|
AbstractRefreshableApplicationContext.refreshBeanFactory
|
AbstractXmlApplicationContext.loadBeanDefinitions
|
AbstractXmlApplicationContext.loadBeanDefinitions
|
AbstractBeanDefinitionReader.loadBeanDefinitions
|
AbstractBeanDefinitionReader.loadBeanDefinitions
|
PathMatchingResourcePatternResolver.getResources
|
DefaultResourceLoader.getResource
|
其实在这里可以看出,这可以返回不同的资源文件类型,有classResource,UrlResource
FileSystemXmlApplicationContext.getResourceByPath
|
至此,Resource定位就到此结束,Ioc初始化的三部分,第一部分已经完成
3. 流程图
4. 总结
将spring的配置文件,也就是bean的xml文件找到的过程,是个寻找资源定位的过程,有可能在classpath,可能在文件系统,也可能是url定位