1 package common;
2 /*
3 * Created on 2007-8-21
4 */
5
6 import java.beans.BeanInfo;
7 import java.beans.Introspector;
8 import java.beans.PropertyDescriptor;
9
10 import com.ebuilds.pmzls.project.dto.TCmBaseDicttypeDto;
11 import com.ebuilds.pmzls.project.ejb.cmp.TCmBaseDicttype;
12 /**
13 * 利用jdk 内省机制,将dto转换未cmp
14 * 当前只支持3个类型
15 * dto to cmp
16 * @author liuyang
17 */
18 public class Convert {
19 public static void convertpojo(Object obj,Object objto,String noconvertcol) throws Exception
20 {
21 // 得到obj对象
22 BeanInfo bi = Introspector.getBeanInfo(obj.getClass(),Object.class );
23 // 得到objto对象
24 BeanInfo bi1 = Introspector.getBeanInfo(objto.getClass(),Object.class );
25 // 取出obj中所有具有get和set方法的变量名
26 PropertyDescriptor[] props = bi.getPropertyDescriptors();
27 // 取出objto中所有具有get和set方法的变量名
28 PropertyDescriptor[] props1 = bi1.getPropertyDescriptors();
29 // 按变量名进行索引
30 for ( int i=0;i<props.length;i++){
31 // 排序对比相同则转换
32 for(int j=0;j<props1.length;j++)
33 {
34 // 是否是不需要转换字段
35 boolean bf = true;
36 // 取出obj中该变量所对应的值
37 Object oth = props[i].getReadMethod().invoke(obj,null);
38 // 如果是不需要转换变量则不进行取值
39 for(String name:noconvertcol)
40 {
41 if(name.equals(props[i].getName()))
42 {
43 bf=false;
44 break;
45 }
46 }
47 // 判断是否是相同类型,相同名称,并且是需要转换的变量
48 if(props[i].getName().equals(props1[j].getName()) && props[i].getPropertyType().equals(props1[j].getPropertyType()) && bf)
49 {
50 // 判断变量类型,将空转换为0或者“”
51 if(props[i].getPropertyType().equals(java.lang.Long.class))
52 {
53 props1[j].getWriteMethod().invoke(objto,(oth==null?Long.valueOf(0):oth));
54 }else if(props[i].getPropertyType().equals(java.lang.String.class)){
55 props1[j].getWriteMethod().invoke(objto,(oth==null?"":oth));
56 }else if(props[i].getPropertyType().equals(java.lang.Integer.class))
57 {
58 props1[j].getWriteMethod().invoke(objto,(oth==null?0:oth));
59 }
60 }
61 }
62 }
63 // for ( int i=0;i<props1.length;i++){
64 // System.out.println(props1[i].getName()+ "=" +
65 // props1[i].getReadMethod().invoke(objto, null ));
66 // }
67 }
68
69
70
71 public static void main(String[] args) throws Exception{
72 // 如果不想把父类的属性也列出来的话,
73 // 那 getBeanInfo 的第二个参数填写父类的信息
74 TCmBaseDicttypeDto dto = new TCmBaseDicttypeDto();
75 dto.setCode("00001");
76 dto.setName("00002");
77 TCmBaseDicttype td = new TCmBaseDicttype();
78 convertpojo(dto, td);
79 }
80
81
82 }
83
最近刚刚看了一些关于内省的文章正好开发项目中要使用,所以自己写了一个转换器,供大家一起学习
TCmBaseDicttypeDto、TCmBaseDicttype只是一个set和get集合我的文章大家看了都没给回复,大哥们给点人气。