import org.apache.log4j.Logger;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.security.AccessController;
import java.security.PrivilegedAction;
/**
* 使用spring的BeanUtil.copyProperties来代替
*/
@Deprecated
public class ObjectCopyUtils {
private static Logger logger = Logger.getLogger(ObjectCopyUtils.class.getName());
private static Object source;
private static Object target;
private static ObjectCopyType objectCopyType;
public enum ObjectCopyType{
SOURCE_NOT_NULL,
TARGET_IS_NULL,
ALL
}
private ObjectCopyUtils(){
}
/**
* @param paramSource 源对象
* @param paramTarget 目标对象
* @param paramObjectCopyType 操作类型 0: 如果源对象的当前i的属性的值不为null,才copy过去. 1:如果目标对象的当前i的属性的值为null,才copy过去.2.默认,所有都copy过去
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static void copyProperties(Object paramSource, Object paramTarget, ObjectCopyType paramObjectCopyType){
source = paramSource;
target = paramTarget;
objectCopyType = paramObjectCopyType;
if(source==null || target==null || objectCopyType==null){
return;
}
AccessController.doPrivileged(
new PrivilegedAction() { //NOSONAR
public Object run() {
Class objClass = source.getClass();
Class tarClass = target.getClass();
// 通过target对象的class到obj的class中逐个扫描有无相同的field类型
Field[] tarFields = tarClass.getDeclaredFields();
for(int i=0; i
String fieldName = tarFields[i].getName();
try {
Field objField = objClass.getDeclaredField(fieldName);
objField.setAccessible(true);
tarFields[i].setAccessible(true);
Object sourceValue = objField.get(source);
Object tarValue = tarFields[i].get(target);
if(tarFields[i].getModifiers() >= Modifier.FINAL){
continue; //final 属性不能修改
}
switch (objectCopyType){
case SOURCE_NOT_NULL:
//如果源对象的当前i的属性的值不为空,才复制过去.
if(sourceValue != null){
tarFields[i].set(target, sourceValue);
}
break;
case TARGET_IS_NULL:
//如果目标对象的当前i的属性的值为空,才复制过去.
if(tarValue == null){
tarFields[i].set(target, sourceValue);
}
break;
default:
//所有复制过去
tarFields[i].set(target, sourceValue);
break;
}
} catch (Exception e) { //NOSONAR
logger.error("ObjectCopyUtils.class copyProperties error" , e);
continue;
}
}
return null;
}
});
}