一、概述
打开spring-beans.gradle,可以看到spring-beans模块只依赖spring-core模块,因此我们第二个先分析这个模块。
通过package-info.java,我们可以得知:This package contains interfaces and classes for manipulating Java beans. 意思就是这个目录包含了一些接口和类,用来控制Java bean。
二、目录分析
2.1)根目录
主要是bean属性访问相关的接口和类
2.2)annotation目录
无内容
2.3)factory目录
主要是Aware接口、BeanFactory接口以及其子接口,Aware有3个子接口:BeanNameAware、BeanFactoryAware、BeanClassLoadAware,Aware结尾的接口功能,请自行百度。BeanFactory体系是最重要的,需要后面专题来讲。
2.4)Factory/config目录
非常重要!!!包含BeanDefinition、BeanPostProcessor、ConfigurableBeanFactory、ConfigurableListableBeanFactory
2.5)Factory/support目录
作用:Factory目录的支持类,抽象工厂、BeanDefinition的读取、注册、回调,自动发现。
包含AutowireCandidateResolver、BeanDefinitionReader、BeanDefinitionRegistry、BeanDefinitionRegistryPostProcessor、BeanNameGenerator、InstantiationStrategy、MergedBeanDefinitionPostProcessor以及他们相应的抽象类、帮助类。
2.6)Factory/xml目录
对xml格式定义的bean读取、处理。
二、详细分析
2.1)重要的接口
PropertyEditorRegistry:封装了PropertyEditor的注册方法
PropertyAccessor:属性访问器,可以访问对象的
TypeConverter:类型转换,会委托给TypeConverterDelegate类去做,方法内会利用core模块的ConversionService去进行转换。上一篇文章我们提到过这个。
ConfigurablePropertyAccessor:封装了可以配置PropertyAccessor的接口
BeanWrapper:Spring底层Java Beans基础设施的中心接口。父类是ConfigurablePropertyAccessor,唯一的实现类:BeanWrapperImpl
PropertyValues:持有一个或者多个PropertyValue对象,
2.2)重要的类
AbstractPropertyAccessor:
PropertyValue:包含一个属性的名字和一个值
BeanWrapperImpl:
2.3)异常相关
我们这里不关注bean的异常体系,不是重点。