spring源码阅读——2.spring-beans

--------------------------org.springframework.beans----------------------------

CachedIntrospectionResults:用于辅助BeanWrapperImpl类,为了提高自省效率而作的cache。CachedIntrospectionResults并没有使用Introspector自带的对自省结果的缓存功能,而是自己实现了基于弱引用的cache。

BeanUtils:提供了一系列工具:根据class创建实例、查找class中的函数、获取class的PropertyDescriptor、在两个实例之间拷贝属性。

BeanWrapperImpl:访问javabean的属性。 类图:


 

DirectFieldAccessor:访问实例的field。

PropertyAccessorFactory:创建BeanWrapperImpl和DirectFieldAccessor。

--------------------------org.springframework.beans.support----------------------------

 ArgumentConvertingMethodInvoker:在查找匹配函数时做了扩展——如果MethodInvoker.findMatchingMethod()找不到,则typeConverter对函数参数进行转换,以此来找到相对匹配的函数。

PagedListHolder:包装一个list,然后对外提供和访问分页有关的方法。

PropertyComparator:根据bean的属性,对bean list或数组进行排序。

 

--------------------------org.springframework.beans.factory----------------------------

BeanFactory的初始化步骤和关闭步骤,参见BeanFactory代码的接口注释。

 

access子包:

SingletonBeanFactoryLocator用于加载多个分组的bean配置文件,且分别保证它们是单例的SingletonBeanFactoryLocator实例。默认加载classpath*:beanRefFactory.xml。其中useBeanFactory函数用于将bean配置文件中配置的BeanFactory类的bean,以BeanFactory形式返回。当引用计数为0时,即外部不再使用其中的beanFactory时,释放SingletonBeanFactoryLocator实例中的资源。

 

annotation子包:

定义了一些注解:Autowired、Configurable、Qualifier、Required、Value

实现了与注解相关的BeanPostProcessor:

AutowiredAnnotationBeanPostProcessor专门处理 bean的注解注入(包括在field上、method上、构造器、class上)

InitDestroyAnnotationBeanPostProcessor处理了bean的自定义init和destroy。

 

FactoryBean接口以及实现:

AbstractServiceLoaderBasedFactoryBean及其子类,主要是调用java.util.ServiceLoader来加载服务。还有其他FactoryBean,略去不讲。

此外AbstractFactoryBean还有其他子类:ListFactoryBean、MapFactoryBean、SetFactoryBean、ObjectFactoryCreatingFactoryBean(ObjectFactory,负责根据beanName从BeanFactory中getBean()获取实例)、ProviderCreatingFactoryBean(Provider,同ObjectFactory)、SortedResourcesFactoryBean(Resource[],根据locations加载资源并按url自然排序)。

AbstractBeanFactory还继承了FactoryBeanRegistrySupport。

--------------------------org.springframework.beans.factory.support--------------------------

BeanDefinition类图:


 

 

 

猜你喜欢

转载自hepeng19861212.iteye.com/blog/2236508