由于需要在各個bean直接進行copy資料,除了傻瓜式的set/get or constructor來copy資料外,spring提供了直接copybean的工具類,原理其實就是通過java反射來根據目標bean的欄位名呼叫其set方法來設值注入,除此之外,專案中還常見map與bean之間的轉換,特封裝此類,以供大家使用,
一下介紹一下常用的工具類:
一:BeanUtils.copyProperties()
long startTime = System.currentTimeMillis();
UserInfoPO u1 = new UserInfoPO();
u1.setQq("123");
u1.setCreateTime(new Date());
u1.setUsername("張三");
UserInfoPO u2 = new UserInfoPO();
BeanUtils.copyProperties(u1, u2);
long endTime = System.currentTimeMillis();
System.out.println("當前程式耗時:" + (endTime - startTime) + "ms");
跑完程式看了下耗時:

通過Spring的內部重寫的copy內:
二:TransferUtils.transferBean()
long startTime = System.currentTimeMillis();
UserInfoPO u1 = new UserInfoPO();
u1.setQq("123");
u1.setCreateTime(new Date());
u1.setUsername("張三");
UserInfoPO u2 = new UserInfoPO();
TransferUtils.transferBean(u1,u2);
long endTime = System.currentTimeMillis();
System.out.println("當前程式耗時:" + (endTime - startTime) + "ms"+"輸出u2:}{}"+"\n"+ JSON.toJSONString(u2));
TransferUtils工具類代碼如下:
public class TransferUtils {
public TransferUtils() {
}
/**
* 物體 bean的轉換
* @param t
* @param k
* @param <T>
* @param <K>
*/
public static <T, K> void transferBean(T t, K k) {
if (null != t && null != k) {
BeanCopier bc = BeanCopier.create(t.getClass(), k.getClass(), false);
bc.copy(t, k, (Converter) null);
}
}
/**
* List 之間的轉換
* @param tList
* @param clazz
* @param <T>
* @param <K>
* @return
*/
public static <T, K> List<K> transferList(Collection<T> tList, Class<K> clazz) {
if (!CollectionUtils.isNotEmpty(tList)) {
return null;
} else {
List<K> kList = new ArrayList();
Iterator var3 = tList.iterator();
while(var3.hasNext()) {
T t = (T) var3.next();
Object tk = null;
try {
tk = clazz.newInstance();
} catch (Exception var7) {
var7.printStackTrace();
return null;
}
BeanCopier bc = BeanCopier.create(t.getClass(), tk.getClass(), false);
bc.copy(t, tk, (Converter)null);
kList.add((K) tk);
}
return kList;
}
}
}
是Spring內部實作的bean之間的copy,在時間執行上,比BeanUtils要快一些,
代碼地址如下:https://github.com/virtuousOne/virtuousone
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291449.html
標籤:其他
上一篇:Java基礎學習(x)
