这里resourceLoader其实就是ClassPathXmlApplicationContext
1.ClassPathXmlApplicationContext
在上文中图例就能看出来
获取资源组可能存在多个bean.xml
循环单独加载资源组
创建一个编码资源并解析
获取当前正在加载的资源发现是空
创建了一个字节输入流,继续解析
委托给Document并加载Document类。
注册beanBeanDefinitions
上图131行判断是不是默认的命名空间即:http://www.springframework.org/schema/beans
很显然profile属性是空。
delegate的作用在于处理beans标签的嵌套,其实Spring配置文件是可以写成这样的:
<?xml version="1.0" encoding="UTF-8"?>
<beans> <bean class="base.SimpleBean"></bean><beans><bean class="java.lang.Object"></bean></beans>
</beans>
xml(schema)的命名空间其实类似于java的报名,命名空间采用URL,比如Spring的是这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"></beans>
xmlns属性就是xml规范定义的用来设置命名空间的。这样设置了之后其实里面的bean元素全名就相当于http://www.springframework.org/schema/beans:bean,可以有效的防止命名冲突。命名空间可以通过规范定义的org.w3c.dom.Node.getNamespaceURI方法获得。
预处理xml,点进去发现是空
解析beandefinitions和后处理xml后续继续说。