感觉spring设计的BeanWrapper很好,基本能满足大部分的赋值操作,和基本类型的转换,如String转Integer,还可以注册类型转换器,把经常用的字符串转换成对象属性的类型, 比如字符串"1988-10-15 12:33:20" 转成java.util.Date类型,测试代码如下: public class Student { private Date birthday; //getter, setter ... } public class DateFormatTest extends PropertyEditorSupport{ private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); @Override public void setAsText(String text) throws IllegalArgumentException { try { super.setValue(dateFormat.parse(text)); } catch (ParseException e) { e.printStackTrace(); } } }
@Test public void beanWrapper() {
Student student = new Student();
BeanWrapper beanWrapper = new BeanWrapperImpl(student);
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put("birthday", "1992-07-08 12:44:66");
beanWrapper.registerCustomEditor(Date.class, new DateFormatTest());
beanWrapper.setPropertyValues(propertyMap);
System.out.println(student.getBirthday()); //打印日期类型
}
当然还有很多操作 如: map赋值 只需要 在 刚创建的时候 beanWrapper.setAutoGrowNestedPaths(true); 常见的对象属性map<String,String> map = null; 赋值 setProperty("map['key']" , "value")即可, 复杂一点的就只有map<String,Person> map = null; 赋值 setProperty("map['key'].name" , "value")即可, 对象属性ArrayList的基本赋值操作 List<String> list = null; 赋值 setProperty("list[0]" , "value")即可, 复杂一点的就只有List<Person> list = null; 赋值 setProperty("list[0].name" , "value")即可, 源码实现紧凑,我现阶段水平有限,无法在字面或类图的形式表达出来,我只能说spring关于这块写的很好......