我们来看一下类图
从这张类图上,我们还是能非常清晰地了解BeanFactory的整体架构的,其最终实现就是XmlBeanFactory,从名字上我们可以看到是解析Xml格式文件的BeanFactory,这样就显得比较单一,所以从Spring 3.1版本以上,XmlBeanFactory已经被Spring设置成不推荐使用了,而改用DefaultListableBeanFactory:
Resource resource = new ClassPathResource("beans.xml"); return new XmlBeanFactory(resource); 改成了 Resource resource = new ClassPathResource("beans.xml"); DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); BeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); reader.loadBeanDefinitions(resource);
从代码上的变化我们可以发现,虽然实现稍微有点复杂了,DefaultListableBeanFactory需要通过显式地创建BeanDefinitionReader类型的读取器读取beans.xml里的数据,但是读取文件的格式能更加多样化了,看下面BeanDefinitionReader的架构:
除了XmlBeanDefinitionReader实现,还有PropertiesBeanDefinitionReader实现,甚至用户可以自定义实现一种数据格式的BeanDefinitionReader。
因为用得不是很多,而且我们知道ApplicationContext的底层实现也是一种BeanFactory,所以这里暂时就写这些,等分析ApplicationContext源码时,我们再来分析即可。