package com.siang.util;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter; public class BeanCopy {
static
{
ConvertUtils.register(new DateConverter(), java.util.Date.class);
ConvertUtils.register(new DateConverter(), java.sql.Date.class);
} /**
* @1 map to bean
* @2 bean to bean
* @3 bean to map
*/
public static void copyProperties(Object dest, Object orig){
try {
if (dest instanceof Map ) {//3 bean to map
transBean2Map((Map)dest,orig);
}else {
BeanUtils.copyProperties(dest, orig);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} /**
* model to map
* @param orig
*/
private static void transBean2Map(Map dest , Object orig) {
try {
BeanInfo beanInfo = Introspector.getBeanInfo(orig.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
// 过滤class属性
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = property.getReadMethod();
Object value = getter.invoke(orig);
dest.put(key, value);
}
}
} catch (Exception e) {
System.out.println("transBean2Map Error " + e);
} } public static void main(String[] args) {
Map<String, Object> map= new HashMap<String, Object>();
map.put("id", "1");
map.put("name", "穿林渡水");
User user = new User();
copyProperties(user , map);
System.out.println(user.getId() + "---" + user.getName());
User user1 = new User();
copyProperties(user1 , user);
System.out.println(user1.getId());
Map<String, Object> map2= new HashMap<String, Object>();
copyProperties(map2 , user);
System.out.println(map2);
}
}

  

最新文章

  1. 转:Android开发:使用JNI读取应用签名
  2. 小例子 熟悉jquery
  3. emc 郵件設置
  4. Scrapy and Selenium
  5. android中viewPager+fragment实现的屏幕左右切换(进阶篇)
  6. JavaScript 中的事件类型1(读书笔记思维导图)
  7. Java基础学习(五)&mdash;Collection
  8. 6.5、Android Studio的Android Device Monitor
  9. Java开源生鲜电商平台-系统架构与技术选型(源码可下载)
  10. Jace 上新建 Station 配置 笔记
  11. vmware 虚拟机报错 删除文件夹,可以恢复
  12. java虚拟机——垃圾回收机制
  13. java中构造代码块、方法调用顺序问题
  14. loadrunner&#160;脚本开发-url解码
  15. LeetCode 461 Hamming Distance 解题报告
  16. PID控制器开发笔记(转)
  17. hdu 1163 Eddy's digital Roots 【九余数定理】
  18. Linux dumpe2fs命令详解
  19. sort排序和uniq统计命令
  20. 自定义DelegatingHandler为ASP.NET Web Api添加压缩与解压的功能

热门文章

  1. Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
  2. TranslateAnimation详解 Android动画。
  3. strace 使用案例
  4. SSMS查看表行数以及使用空间 How to show table row count and space used in SSMS - SSMS Tutorials
  5. 咏南3层数据集控件--TYNDataSet
  6. [置顶] kubernetes资源对象--ResourceQuotas
  7. homebrew代理设置
  8. DotnetBrowser高级教程-(5)使用内置的MVC UI框架-EasyMvc
  9. Ubuntu中彻底修改用户名及密码
  10. DTD 和 Schema简介