Spring的目的:让bean成为一个纯粹的POJO(注册和加载bean)
Spring IOC:控制反转(依赖对象的获得被反转)。很多时候需要通过多个对象之间的协作来完成一个功能,若果获取所依赖对象靠自身实现,将导致代码耦合度高且难以测试。
Spring IOC通过引入xml配置,由IOC容器来管理生命周期和依赖关系。之前获取两个有依赖关系的对象要用set方法,用了容器之后,它们的关系由容器来管理。
传统写法: B b = new B(); A a = new A(); b.setA(a)
Spring获取:ApplicationContext ac = new classPathXmlApplicationContext("beans.xml"); B b = (B) ac.getBean("B");
1. DefaultListableBeanFactory
XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册及加载bean的默认实现。
XmlBeanFactory中使用了自定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取;DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionBeanFactory接口。
XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,从XML文档中读取BeanDefinition,对于注册及获取Bean都是从父类DefaultListableBeanFactory继承的方法实现。唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性。在XmlBeanFactory中主要使用reader属性对资源文件进行读取和注册。
2.XmlBeanDefinitionReader
XML配置文件的读取是Spring中的重要功能,大致流程如下:
1)通过继承自AbstractBeanDefinitionReader中得方法,来使用ResourceLoader将资源文件路径转换为对应的Resource文件;
2)通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件;
3)通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析。
References:《Spring源码深度解析》
网友评论