package cn.veryedu.util;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class BeanUtile3 {
public void copyeProperties(Object tagert,Object source){
Class s =source.getClass();
Class t = tagert.getClass();
Field[] sf=s.getDeclaredFields();
Field f=null;
Field t_f=null;
for(int i=0;i<sf.length;i++){
f=sf[i];
String sname=f.getName(); System.out.println(sname);
t_f=getTagertField( t, sname);
if(t_f==null||!f.getType().equals(t_f.getType())){
continue;
}
else{
//拷贝
CopyPerperties(f,source, t_f, tagert);
}
}
}
public Field getTagertField(Class t,String sname){
Field t_f=null;
try {
t_f=t.getDeclaredField(sname);
} catch (SecurityException e) {
return null;
} catch (NoSuchFieldException e) {
return null;
}
return t_f;
}
public void CopyPerperties(Field f,Object source,Field t_f,Object tagert){
String getMethodName=createMethodName("get",f);
Object value=getFieldValue(source,getMethodName);
setFieldValue(t_f,tagert,value);
}
public void setFieldValue(Field t_f,Object tagert,Object value){
String getMethodName=createMethodName("set",t_f);
Class clazz=tagert.getClass();
Object result=null;
try {
Method getMethod=clazz.getMethod(getMethodName, new Class[]{t_f.getType()});
result=getMethod.invoke(tagert, value);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Object getFieldValue(Object source,String getMethodName){
Class clazz=source.getClass();
Object result=null;
try {
Method getMethod = clazz.getMethod(getMethodName, null);
result = getMethod.invoke(source, null);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public String createMethodName(String option,Field f){
String fName=f.getName();
String first =fName.substring(0,1);//将首字母改大写
first =first.toUpperCase();
fName=first +fName.substring(1, fName.length());
return option+fName;
}
}
反射机制----BeanUtils编程参考工程Test_java 复杂
最新推荐文章于 2024-04-27 14:30:00 发布