您的位置:首页 > 编程语言 > Java开发

简单的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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: