最近看了一下spring的源码,简单过了一部分,记录一下我所理解的IOC初始化过程。
1:首先说一下ApplicationContext,容器初始化的核心方法,继承了FileSystemApplicationContext类,并且重写了其中的refresh方法,此方法是做什么的?因为FileSystemApplicationContext继承了abstractXmlApplicationContext类,refresh重写了其父类的refreshBeanFactory方法。
2:refreshBeanFactory里面主要做了些什么?此方法其中通过createBeanFactory方法创建了一个DefaultListableBeanFactory容器,就是我们所说的beanFactory。
3:在创建完bean工场之后调用了loadBeanDefinitions方法,这个方法是在abstractXmlApplicationContext的基类DeaultResourcesLoader中的,此方法内部调用了其内部方法getResourcesByPath(String xmlPath),参数就是我们的xml配置文件的路径位置,找到我们的xml并且返回一个FileSystemResources对象。
4:此对象由DeaultResourcesLoader基类当中的BeanDefinitionsReader来解析为一个dom对象,之后再由BeanDefinitionsDocumentReader将此dom对象按照spring内定的规则例如xml标签验证,对象set方法是否存在等规则解析之后注入到DefaultListableBeanFactory当中对BeanDefinitionMap中。