您的位置:首页 > 其它

框架模拟依赖注入

2016-09-29 22:07 288 查看
Spring框架模拟依赖注入,注入某个对象和给他对应的属性。testDo 有属性Node类,Node有日期类型需要处理因此用到我之前说的动态代理去处理

public class TestDo {
private String nodename;
private NodeDo nodeDo;

public String getNodename() {
return nodename;
}

public void setNodename(String nodename) {
this.nodename = nodename;
}

public NodeDo getNodeDo() {
return nodeDo;
}

public void setNodeDo(NodeDo nodeDo) {
this.nodeDo = nodeDo;
}
}
package cn.itcast.shujujiegou.StructuresAnalysis;

import java.util.Date;

/**
* Created by likailong on 2016/9/29.
*/
public class NodeDo {
private String name;

public void setEmail(String email) {
this.email = email;
}

private String email;

public Date getDateTime() {
return dateTime;
}

public void setDateTime(Date dateTime) {
this.dateTime = dateTime;
}

private Date dateTime;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}
}

package cn.itcast.shujujiegou.StructuresAnalysis;

import java.beans.PropertyEditor;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
* Created by likailong on 2016/9/29.
*/
public class NodeDOEditor extends PropertyEditorSupport {
public final static SimpleDateFormat DEFAULT_DATE_FORMAT=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void setAsText(String text){
String [] tokens=text.split("\\|");
NodeDo nodeDo=new NodeDo();
nodeDo.setName(tokens[0]);
nodeDo.setEmail(tokens[1]);
try {
nodeDo.setDateTime(DEFAULT_DATE_FORMAT.parse(tokens[2]));
} catch (ParseException e) {
e.printStackTrace();
}
setValue(nodeDo);
}

}

package cn.itcast.shujujiegou.StructuresAnalysis;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.beans.PropertyEditor;
import java.beans.PropertyEditorManager;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
* Created by likailong on 2016/9/29.
* 因为加载静态在加载别的代码快
*/
public class PropertiesEditorSample {
private final static Field[] TEST_FIELDS=TestDo.class.getDeclaredFields();
static{
PropertyEditorManager.registerEditor(NodeDo.class,NodeDOEditor.class);
}
public static void main(String [] args) throws IllegalAccessException, IntrospectionException, InvocationTargetException {
Map<String,String> map=new HashMap<String,String>()
{
private static final long serialVersionUID=1l;
{
put("nodename","李凯龙测试");
put("nodeDo","xieyuii|pangpang@qq.com|2016-9-29 12:21:12");
}
};
TestDo aa = convertParameterToDo(map);
System.out.println(aa.getNodename());
System.out.println(aa.getNodeDo().getDateTime());
}
private static TestDo convertParameterToDo(Map<String,String> parameter) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
TestDo testDo=new TestDo();
for(Field field:TEST_FIELDS){
PropertyDescriptor propertyDescriptor=new PropertyDescriptor(field.getName(),TestDo.class);
Method method = propertyDescriptor.getWriteMethod();
if(field.getType()==String.class){
String aa = field.getName();
System.out.print(parameter.get(field.getName()));
method.invoke(testDo,parameter.get(field.getName()));
}else {
PropertyEditor properEditer = PropertyEditorManager.findEditor(field.getType());
if(properEditer!=null){
properEditer.setAsText(parameter.get(field.getName()));
method.invoke(testDo,properEditer.getValue());
}else {
System.out.println("properties:");
}
}
}
return testDo;
}
}


测试结果

数据注入进来并且被处理。用到了java.beans中的类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: