中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Bean復制的幾種方法介紹

發布時間:2021-09-08 15:03:11 來源:億速云 閱讀:176 作者:chen 欄目:大數據

這篇文章主要講解了“Bean復制的幾種方法介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Bean復制的幾種方法介紹”吧!

4 種復制方法:

  • Apache BeanUtils

  • Apache PropertyUtils

  • Spring BeanUtils

  • Cglib BeanCopier

測試 Bean,FromBean 與 ToBean 屬性一致

public class FromBean {
    private String name;
    private int age;
    private double money;
 
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

測試方法

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.cglib.beans.BeanCopier;

public class Test {

	public static void main(String[] args) {
		FromBean fb = new FromBean();
		fb.setAge(20);
		fb.setMoney(30000.111);
		fb.setName("測試");

		int count = 10;

		convert((tb) -> BeanUtils.copyProperties(tb, fb), count, "Apache BeanUtils.copyProperties");

		convert((tb) -> PropertyUtils.copyProperties(tb, fb), count, "Apache PropertyUtils.copyProperties");

		convert((tb) -> org.springframework.beans.BeanUtils.copyProperties(fb, tb), count, "Spring BeanUtils.copyProperties");

		BeanCopier bc = BeanCopier.create(FromBean.class, ToBean.class, false);

		convert((tb) -> bc.copy(fb, tb, null), count, "Cglib BeanCopier.copy");

	}

	public static void convert(ConvertBean cb, int count, String type) {
		try {
			System.out.println(type + "開始進行測試");
			long start = System.currentTimeMillis();
			for (int i = 0; i < count; i++) {
				ToBean tobean = new ToBean();
				cb.convertMethod(tobean);
				System.out.println(tobean.getAge());
				System.out.println(tobean.getMoney());
				System.out.println(tobean.getName());
			}
			System.out.println("耗時 " + (System.currentTimeMillis() - start) + " ms");
			System.out.println("----------------------");
		} catch (Exception e) {
			System.out.println("Exception: " + e.getMessage());
			e.printStackTrace();
		}
	}
}

@FunctionalInterface
interface ConvertBean {

	void convertMethod(ToBean tb) throws Exception;
}

打印結果

Apache BeanUtils.copyProperties開始進行測試
耗時 1178 ms
----------------------
Apache PropertyUtils.copyProperties開始進行測試
耗時 5 ms
----------------------
Spring BeanUtils.copyProperties開始進行測試
耗時 172 ms
----------------------
Cglib BeanCopier.copy開始進行測試
耗時 0 ms
----------------------

測試結果

單位:ms

count:10

次數:10第一次第二次第三次第四次平均值單次平均值
Apache BeanUtils1178102991710191035.75103.575
Apache PropertyUtils54845.250.525
Spring BeanUtils172257123135171.7517.175
Cglib BeanCopier000000

count:100

次數:100第一次第二次第三次第四次平均值單次平均值
Apache BeanUtils18681258162412601502.515.025
Apache PropertyUtils1610181715.250.1525
Spring BeanUtils193152209215192.251.9225
Cglib BeanCopier000000

count:10000

次數:10000第一次第二次第三次第四次平均值單次平均值
Apache BeanUtils16111657178615721656.50.16565
Apache PropertyUtils243641941111530.0153
Spring BeanUtils5512174334314080.0408
Cglib BeanCopier106376.50.00065

結論

  • 數量越大平均每次耗時越少

  • 綜合 Cglib BeanCopier 性能最好,但在使用前,要先用 BeanCopier.create 定義

Cglib在測試的時候,先進行了實例的緩存,這個也是他性能較好的原因

Spring BeanUtils 不能轉化 java.util.Date,可以支持它的子類 java.sql.Date

感謝各位的閱讀,以上就是“Bean復制的幾種方法介紹”的內容了,經過本文的學習后,相信大家對Bean復制的幾種方法介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

米脂县| 博白县| 巴塘县| 沈阳市| 嵩明县| 普兰县| 炉霍县| 新田县| 齐齐哈尔市| 桓台县| 宣武区| 远安县| 鄂温| 襄垣县| 治县。| 康乐县| 南汇区| 上虞市| 鹤壁市| 阳西县| 通城县| 南丰县| 洪湖市| 怀远县| 南开区| 吴忠市| 张掖市| 通辽市| 美姑县| 康平县| 湟源县| 卫辉市| 上栗县| 舟曲县| 额尔古纳市| 时尚| 陆良县| 新乡县| 科技| 宿州市| 安阳市|