简单的spring使用反射实现属性赋值demo
2016-03-03 15:53
393 查看
class Domain implements Serializable { private String name; private Date date; public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "Domain [name=" + name + ", date=" + date + "]"; } }
class MyDomain implements Serializable { private String name; private Integer id; private Domain domain; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Domain getDomain() { return domain; } public void setDomain(Domain domain) { this.domain = domain; } @Override public String toString() { return "MyDomain [name=" + name + ", id=" + id + ", domain=" + domain + "]"; } }
package com.concurrent; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; public class DomainEditor extends PropertyEditorSupport { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); @Override public void setAsText(String text) throws IllegalArgumentException { String[] toke = text.split("\\|"); String name = toke[0]; String date = toke[1]; Domain domain = new Domain(); domain.setName(name); try { domain.setDate(DATE_FORMAT.parse(date)); } catch (ParseException e) { throw new IllegalArgumentException(e); } setValue(domain); } }
package com.concurrent; import java.beans.PropertyDescriptor; import java.beans.PropertyEditor; import java.beans.PropertyEditorManager; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; import java.util.HashMap; import java.util.Map; public class Test002 { private static final Field[] FIELDS = MyDomain.class.getDeclaredFields(); static { PropertyEditorManager.registerEditor(Domain.class, DomainEditor.class); } public static void main(String[] args) throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("name", "老王"); map.put("id", "1"); map.put("domain", "laozhang|1989-05-09 11:11:11"); MyDomain myDomain = stringToDomain(map); System.out.println(myDomain); } public static MyDomain stringToDomain(Map<String, String> map) throws Exception { MyDomain myDomain = new MyDomain(); for (Field field : FIELDS) { PropertyDescriptor propertyDescriptor = new PropertyDescriptor( field.getName(), MyDomain.class); Method method = propertyDescriptor.getWriteMethod(); if (field.getType() == String.class) { method.invoke(myDomain, map.get(field.getName())); } else if (field.getType() == Integer.class) { method.invoke(myDomain, Integer.parseInt(map.get(field.getName()))); } else { PropertyEditor editor = PropertyEditorManager .findEditor(Domain.class); if (editor != null) { editor.setAsText(map.get(field.getName())); method.invoke(myDomain, editor.getValue()); } else { System.out.println("wrong properties!!" + field.getName()); } } } return myDomain; } }
相关文章推荐
- java修饰符作用域
- SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入?
- 如何在jmeter中调用自己写的java工具包
- Java 单例模式
- Spring定时任务异常
- 深入分析Java的序列化与反序列化
- Java中XML格式的字符串4读取方式的简单比较
- 细说Java(二)
- Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse
- Java类加载器(自定义类加载器)
- Spring Task
- Java对象的序列化与反序列化
- Java I/O 模型的演进
- sonarQube的配置和使用(在eclipse下载插件)
- Java高级---多线程
- Java对图片缩放,旋转,增加水印,裁剪
- IT十八掌作业_java基础第二天_进制转换原理和补码存储方式
- Struts2的声明式异常源码分析
- 正则表达式【java】
- Java源码阅读之String