您的位置:首页 > 运维架构

基于反射技术实现 Bean 属性拷贝 copyProperties

2008-01-18 10:30 627 查看
import java.lang.reflect.AccessibleObject;

import java.lang.reflect.Field;

import org.apache.log4j.Logger;

public class BeanUtil {

private static final Logger logger = Logger.getLogger(Logger.class);

/**

* Bean 属性拷贝

*

* @param dest

* @param orig

*/

public  static void copyProperties(Object dest,Object orig){

if(orig==null){

logger.error("/n error: copy property error: orig is null");

}

if(dest==null){

logger.error("/n error: copy property error: dest is null");

}

try {

copy(dest,orig);

} catch (Exception e) {

logger.error("/n error: copy property error: "

+ e.toString());

}

}

/**

* 当orig的属性为 null 的就不拷贝到 dest

*

* @param dest

* @param orig

* @throws Exception

*/

private static void copy(Object dest,Object orig) throws Exception {

// 得到两个Class 的所有成员变量

Field[] destFields=dest.getClass().getDeclaredFields();

Field[] origFields=orig.getClass().getDeclaredFields();

// 设置访问权限

AccessibleObject.setAccessible(destFields, true);

AccessibleObject.setAccessible(origFields, true);

Object value=null;

String name=null;

String returnType=null;

for (int i = 0; i < origFields.length; i++) {

name=origFields[i].getName();

returnType=origFields[i].getType().getName();

for (int j = 0; j < destFields.length; j++) {

if(name.equals(destFields[j].getName())&&returnType.equals(destFields[j].getType().getName())){

value=origFields[i].get(orig);

if(value!=null){

destFields[j].set(dest,value);

}

break;

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: