框架模拟依赖注入
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;
}
}
测试结果
数据注入进来并且被处理。用到了java.beans中的类
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中的类
相关文章推荐
- 框架模拟依赖注入
- 框架模拟依赖注入
- 框架模拟依赖注入
- 框架模拟依赖注入
- Webx框架:依赖注入
- spring依赖注入原理的简单模拟
- 关于Android依赖注入框架ButterKnife和Dagger的简单比较
- 打造Android依赖注入框架,改变你的代码方式(上)
- 在ABAP里模拟实现Java Spring的依赖注入
- Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100
- YII框架的依赖注入容器DI使用方法-实例说明
- Android IOC 依赖注入框架
- 从零写Java Web框架——实现Ioc依赖注入
- YII框架的依赖注入容器与服务定位器简述
- Android面试系列文章2018之实战经验部分之依赖注入框架篇
- 模拟AngularJS之依赖注入
- Android:dagger2让你爱不释手-基础依赖注入框架篇
- Guice--Java依赖注入框架
- Android——Dagger2依赖注入框架
- 打造Android依赖注入框架,改变你的代码方式(上)