實體類引數複製
實體類引數複製:用於接收的VO,複製到實體Bean裡面,要求引數名相同,不同的引數名手動get set新增
package com.bofeng.smart.school.common.bean;
import org.springframework.cglib.beans.BeanCopier;
import java.util.HashMap;
import java.util.Map;
/**
* 將beancopier做成靜態類,方便拷貝
* <br>建立日期:2015年12月1日
* <br><b>Copyright 2015 UTOUU All Rights Reserved</b>
*
* @author yushaojian
* @version 1.0
* @since 1.0
*/
public class BeanUtils {
public static final Map<String, BeanCopier> BEAN_COPIERS = new HashMap<String, BeanCopier>();
/**
* @param source 資源類
* @param target 目標類
* @Title: copyProperties
* @Description:
* (1)相同屬性名,且型別不匹配時候的處理,ok,但是未滿足的屬性不拷貝;
* (2)get和set方法不匹配的處理,建立拷貝的時候報錯,無法拷貝任何屬性(當且僅當sourceClass的get方法超過set方法時出現)
* (3)BeanCopier
* 初始化例子:BeanCopier copier = BeanCopier.create(Source.class, Target.class, useConverter=true)
* 第三個引數userConverter,是否開啟Convert,預設BeanCopier只會做同名,同型別屬性的copier,否則就會報錯.
* copier = BeanCopier.create(source.getClass(), target.getClass(), false);
* copier.copy(source, target, null);
* (4)修復beanCopier對set方法強限制的約束
* 改寫net.sf.cglib.beans.BeanCopier.Generator.generateClass(ClassVisitor)方法
* 將133行的
* MethodInfo write = ReflectUtils.getMethodInfo(setter.getWriteMethod());
* 預先存一個names2放入
* 109 Map names2 = new HashMap();
* 110 for (int i = 0; i < getters.length; ++i) {
* 111 names2.put(setters[i].getName(), getters[i]);
* }
* 呼叫這行程式碼前判斷查詢下,如果沒有改writeMethod則忽略掉該欄位的操作,這樣就可以避免異常的發生。
* @author yushaojian
* @date 2015年11月25日下午4:56:44
*/
public static void copyProperties(Object source, Object target) {
String beanKey = generateKey(source.getClass(), target.getClass());
BeanCopier copier = null;
if (!BEAN_COPIERS.containsKey(beanKey)) {
copier = BeanCopier.create(source.getClass(), target.getClass(), false);
BEAN_COPIERS.put(beanKey, copier);
} else {
copier = BEAN_COPIERS.get(beanKey);
}
copier.copy(source, target, null);
}
private static String generateKey(Class<?> class1, Class<?> class2) {
return class1.toString() + class2.toString();
}
}
測試用例::
BeanUtils.copyProperties(a,q);
q.setA(a.getA());
q.setB(a.getB());
a是有資料的類,q是需要被複制進去資料的類(沒資料)
相關文章
- OGG classic模式maxtransops引數提升複製效率模式
- Orika - 類複製工具
- MySQL主從複製配置引數 -- logs-slave-updatesMySql
- mysql記憶體引數分類大全MySql記憶體
- 把瀏覽器的引數複製 postman(form-data)格式瀏覽器PostmanORM
- js 實現深複製/深複製JS
- 每天一個 PHP 語法五引用計數與寫時複製的實現PHP
- mysql 複製引數replicate_do_db和replicate_ignore_db介紹MySql
- mysql複製那點事 - Seconds_behind_Master引數調查筆記MySqlAST筆記
- SpringMvc上傳圖片及表單提交(單檔案+實體類引數提交)SpringMVC
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- Percona Toolkit 神器全攻略(複製類)
- 好用的IdCardNumberMethod工具類(直接複製使用)
- 如何同時複製、分類檔案
- Java引用複製、淺複製、深複製Java
- 前端實現複製功能前端
- JS實現複製大法JS
- java語言邏輯類、引數類和字元類Java字元
- 如何透過動態引數實現週報製作
- JS物件複製:深複製和淺複製JS物件
- java進階(34)--File類、目錄複製Java
- 複製和引用複製
- poi操作excel,複製sheet,複製行,複製單元格,複製styleExcel
- JS如何實現點選複製功能,JS點選複製文字JS
- js實現複製連結JS
- redis 主從複製實現Redis
- vue實現物件的複製Vue物件
- mysql實現主從複製MySql
- MySQL 主從複製實操MySql
- mysql 複製原理與實踐MySql
- 【中介軟體】Redis 實戰之主從複製、高可用、分散式Redis分散式
- 淺複製與深複製
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- C技巧:結構體引數轉成不定引數結構體
- java安全編碼指南之:敏感類的複製Java
- ZeroClipboard 多個複製按鈕,多個複製連結 實現方式
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- python 淺複製、深複製坑Python