对于bean属性的操作,大家熟知的主要有下面这些工具类:
- Apache的BeanUtils和PropertyUtils
- cglib的BeanMap和BeanCopier
- spring的BeanUtils
但是最近我发现,在spring中有一个更强大的操作bean的类BeanWrapper,它的强大体现在下面两个方面:
- 支持设置嵌套属性
- 支持属性值的类型转换(设置ConversionService)。
这两方面比其他那些工具类好用多了。
示例代码如下:
BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess( obj);
beanWrapper.setConversionService(
conversionService
);
//值类型转换,跟spring mvc无缝集成
beanWrapper.setAutoGrowNestedPaths(
true
);
//对于null值,是否自动创建新对象
beanWrapper.setPropertyValue(
"a[0].b[dd].a"
,
"value"
);
嵌套属性支持数组、Map、对象等的嵌套。
值类型转换类ConversionService,Spring中有具体的实现类,里面已经内建了大部分常用的转换,比如字符串转日期、字符串转数值等。