Spring源码解析

308 阅读2分钟
Spring核心的2个类:DefaultListableBeanFactory DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现。 

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() ;