⑤. 档案馆(DefaultListableBeanFactory)创建好,初始化好以后有一个方法叫loadBeanDefinitions(beanFactory); 也就是加载所有的bean定义信息,bean的定义信息就是xml配置的各种组件,就叫bean的定义信息
⑥. 也就是xml配置的那些组件(bean定义信息),被加载进去了如何加载bean定义信息的呢?
loadBeanDefinitions(beanDefinitionReader); 加载bean的定义信息,它是利用beanDefinitionReader来加载的
beanDefinitionReader这个从XmlBeanDefinitionReader里面来, 它在这里准备了一个beanDefinitionReader(bean定义信息的读取器)
而beanDefinitionReader叫bean定义信息的读取器,也就是读取那些xml内容的读取器,甚至可以给loadBeanDefinitions下面的XmlBeanDefinitionReader这里打一个断点,来看看这个loadBeanDefinitions读取器是咋读方法的—这一块断点我已取消,因为先放在这
然后接下来有个方法叫loadBeanDefinitions加载bean的定义信息,它是把读取器beanDefinitionReader传入进去了,而这个beanDefinitionReader这个读取器里面也有资源加载器
AbstractXmlApplicationContext里面的: // Configure the bean definition reader with this context's // resource loading environment. beanDefinitionReader.setEnvironment(this.getEnvironment()); beanDefinitionReader.setResourceLoader(this);//持有ioc容器的环境类 beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this)); // Allow a subclass to provide custom initialization of the reader, // then proceed with actually loading the bean definitions. initBeanDefinitionReader(beanDefinitionReader); loadBeanDefinitions(beanDefinitionReader);
这个beanDefinitionReader(读取器)里面又组合了一个叫资源加载器:beanDefinitionReader.setResourceLoader(this)