基於反射技術實現 Bean 屬性拷貝 copyProperties

importjava.lang.reflect.AccessibleObject;
importjava.lang.reflect.Field;
importorg.apache.log4j.Logger;

/***//**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2006</p>
*
*<p>Company:</p>
*
*<p>Author:一個人的日子</p>
*
*<p>Version:1.0</p>
*
*<p>CreateDate:2006-08-17</p>
*
*/



publicclassBeanUtil...{

privatestaticfinalLoggerlogger=Logger.getLogger(Logger.class);

/***//***//***//**
*Bean屬性拷貝
*
*
@paramdest
*
@paramorig
*/

publicstaticvoidcopyProperties(Objectdest,Objectorig)...{
if(orig==null)...{
logger.error(
"error:copypropertyerror:origisnull");
}


if(dest==null)......{
logger.error(
"error:copypropertyerror:destisnull");
}

try......{
copy(dest,orig);
}
catch(Exceptione)......{
logger.error(
"error:copypropertyerror:"+e.toString());
}

}


/***//***//***//**
*當orig的屬性爲null的就不拷貝到dest
*
*
@paramdest
*
@paramorig
*
@throwsException
*/

privatestaticvoidcopy(Objectdest,Objectorig)throwsException...{

//得到兩個Class的所有成員變量
Field[]destFields=dest.getClass().getDeclaredFields();
Field[]origFields
=orig.getClass().getDeclaredFields();

//設置訪問權限
AccessibleObject.setAccessible(destFields,true);
AccessibleObject.setAccessible(origFields,
true);

Objectvalue
=null;
Stringname
=null;
StringreturnType
=null;

for(inti=0;i<origFields.length;i++)...{
name
=origFields[i].getName();
returnType
=origFields[i].getType().getName();
for(intj=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;
}

}

}

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章