--------------------------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类图: