##################### PropertyValue ############################
AttributeAccessor定义了访问属性访问器
AttributeAccessorSupport使用hash表来管理属性访问器
BeanMetadataElement接口携带了包含bean元数据元素的source对象
BeanMetadataAttribute类持有bean对象中一个key/value属性,跟踪source对象
BeanMetadataAttributeAccessor继承了AttributeAccessorSupport类,实现了BeanMetadataElement接口,
它不仅拥有属性访问器,它把属性值设置为BeanMetadataAttribute类型,把key设置为BeanMetadataAttribute的key,它还可以跟踪source对象
PropertyValue继承自BeanMetadataAttributeAccessor
保存bean对象中的信息及值,使用一个对象,而不是让所有属性保存在Map对象中,它允许了更大的灵活性,并且能都处理索引属性来优化
它可以是简单的包含属性,不需要进行解析后放入
PropertyValues接口持有一个或多个PropertyValue对象,通常更新指定的bean。
MutablePropertyValues实现了PropertyValues接口。
把所有PropertyValue放入了List集合中,可以当作集合来管理PropertyValue对象,
它提供了构造器可以对来自List Map PropertyValues等持有PropertyValue对象的集合中进行深度拷贝。
/**
*################################ BeanWrapper#############################
* PropertyAccessor接口定义了class类中字段的访问和设置功能
* 判断该字段是否支持读 写
* 通过字段名取得对应的类型
* 通过字段名得到对应的对象
* 通过字段名得到类型描述TypeDescipter
* 通过name,vaule或Map或PropertyValue或PropertyValues来设置字段值
* 在设置PropertyValues集合属性时,可以设置是否忽略不需要的元素或无法验证的元素
*
* ConfigurablePropertyAccessor接口继承了PropertyAccessor接口 PropertyEditorRegistry接口 和TypeConverter接口
* 它就包含属性访问器、编辑器管理、及类型转换功能
* 它自己设置配置转换器服务ConversionService
* 设置了是否需要提取编辑器设置的旧值
* AbstractPropertyAccessor抽象类实现了TypeConverterSupport和ConfigurablePropertyAccessor
* 定义了访问器的set get 主要结构,主要的实现有子类完成,这是典型的模板方法。
*
* 定义bean对象,
* 定义bean对象的.之前的根路径对象,如果对象是集合,定义每个元素在集合中的路径
* 定义了缓存当前访问器的map key nestedPath value是该类下的下一个访问器
* 构造器
* 1.是否使用默认的编辑器
* 2.默认构造函数为使用默认的编辑器
* 3.给定对象或类型
* 构造器根据设定的值构造该对象
* 可以访问该对象实例
* 可以访问该对象类型
* 可以访问该对象在元素集合中的位置属性
* 可以访问该对象访问器的根对象 .最前面的对像及根对象类型
*
*
* 设置值 String propertyName, Object value
* 1:通过属性名