Spring提供了2种容器类型:beanFactory和上下文,目前先分析beanFactory。
beanFactory包括XmlBeanFactory。 首先看下相关的类图。

UML类图中实现表示继承关系,虚线表示实现关系。
AliasRegistry:定义对alias的简单增删该操作等。
SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现。
SingletonBeanRegistry:定义对单例的注册及获取。
BeanFactory:定义获取bean及bean的各种属性。
DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现。
HierarchicalBeanFactory:继承BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parentFacotry的支持。
BeanDefinitionRegistry:定义对BeanDefinition的各种增删改操作。
FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能。
ConfigurableBeanFactory:提供配置Factory的各种方法。
ListableBeanFactory:根据各种条件获取bean的配置清单。
AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
AutowireCapableBeanFactory:提供创建bean、自动注入、初始化以及应用bean的后处理器。
AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现。
ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口等。
DefaultListableBeanFactory:综合上面所有的功能,主要是对bean注册后的处理。
XmlBeanFactory:中主要使用reader属性对资源文件进行读取和注册。
其中XmlBeanFactory继承了DefaultListableBeanFactory,但是和DefaultListableBeanFactory不同的是,XmlBeanFactory自定义了XmlBeanDefinitionReader这个属性来对资源文件进行读取和注册。
接下来看下如下代码:
在上述代码中首先调用ClassPathResource的构造函数来构造Resource资源文件的实例对象,这样就可以用Resource提供的各种服务来进行操作,然后就能对XmlBeanFactory初始化了,那么Resource如何进行封装的?Spring提供了Resource接口,该接口继承了InputStreamSource接口,这个继承的接口里面只有一个方法:getInputStream,返回一个新的InputStream对象。
而Resource接口提供了如下方法:
boolean exists ();boolean isReadable() ; boolean isOpen(); boolean isFile(); URL getURL() throws IOException ; URI getURI() throws IOException ; File getFile() throws IOException ; long lastModified() throws IOException ; Resource createRelative (String relativePath) throws IOException ; String getFilenarne() ; String getDescription() ;
是