beans包下次级接口及实现类分析:
ConfigurablePropertyAccessor:封装PropertyAccessor的配置方法的接口,还扩展了PropertyEditorRegistry接口,该接口定义了方法,用于PropertyEditor管理。
void setConversionService(@Nullable ConversionService conversionService):指定用于转换的Spring 3.0 ConversionService
属性值,作为JavaBeans PropertyEditors的替代。
ConversionService getConversionService():返回关联的ConversionService(如果有)。
void setExtractOldValueForEditor(boolean extractOldValueForEditor):
boolean isExtractOldValueForEditor():设置是否在应用时提取旧属性值,属性编辑器为属性的新值。
void setAutoGrowNestedPaths(boolean autoGrowNestedPaths):*设置此实例是否应尝试“自动增长”a
boolean isAutoGrowNestedPaths():返回是否已激活嵌套路径的“自动增长”。
BeanWrapper:Spring的低级JavaBeans基础结构的中央接口。
接口方法如下:
/**
* 指定阵列和集合自动增长的限制。
* <p>普通BeanWrapper的默认值是无限制的。
* @since 4.1
*/
void setAutoGrowCollectionLimit(int autoGrowCollectionLimit);
/**
* 返回阵列和集合自动增长的限制。
* @since 4.1
*/
int getAutoGrowCollectionLimit();
/**
* 返回此对象包装的bean实例。
*/
Object getWrappedInstance();
/**
* 返回包装的bean实例的类型。
*/
Class<?> getWrappedClass();
/**
* 获取包装对象的PropertyDescriptors
*(由标准JavaBeans内确定)。
* @return包装对象的PropertyDescriptors
*/
PropertyDescriptor[] getPropertyDescriptors();
/**
* 获取特定属性的属性描述符
* 包裹物体的*。
* @param propertyName获取描述符的属性
*(可能是嵌套路径,但没有索引/映射属性)
* @return指定属性的属性描述符
* @throws InvalidPropertyException如果没有这样的属性
*/
PropertyDescriptor getPropertyDescriptor(String propertyName) throws InvalidPropertyException;
BeanWrapperImpl:BeanWrapper实现类,负责bean注入,属性注入
BeanWrapperImpl实现类代码太多,具体详情看spring官方源码,beans包下BeanWrapperImpl类。
使用用例如下:
public class Person {
private String name;
private int age;
private Relatives relatives;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Relatives getRelatives() {
return relatives;
}
public void setRelatives(Relatives relatives) {
this.relatives = relatives;
}
}
public class Relatives {
private int money;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
public class StartMain {
public static void main(String[] args) {
//Annotation
BeanWrapper wrapper = new BeanWrapperImpl(new Person());
wrapper.setPropertyValue("name", "kill");
wrapper.setPropertyValue("age", 23);
BeanWrapper wrapper2 = new BeanWrapperImpl(new Relatives());
wrapper2.setPropertyValue(new PropertyValue("money", 10000));
wrapper.setPropertyValue("relatives", wrapper2.getWrappedInstance());
System.err.println(wrapper.getPropertyValue("relatives.money"));
}
}