欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

基于asm實(shí)現(xiàn)比springBeanUtils性能更好的屬性拷貝框架

Bean-Mapping

日常開(kāi)發(fā)中經(jīng)常需要將一個(gè)對(duì)象的屬性,賦值到另一個(gè)對(duì)象中。

成都創(chuàng)新互聯(lián)專(zhuān)注于農(nóng)安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供農(nóng)安營(yíng)銷(xiāo)型網(wǎng)站建設(shè),農(nóng)安網(wǎng)站制作、農(nóng)安網(wǎng)頁(yè)設(shè)計(jì)、農(nóng)安網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造農(nóng)安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供農(nóng)安網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

常見(jiàn)的工具有很多,但都多少不夠簡(jiǎn)潔,要么不夠強(qiáng)大。

我們經(jīng)常使用的 Spring BeanUtils 性能較好,但是特性不足。

Bean-Mapping 提供了很多豐富的特性,便于日常開(kāi)發(fā)。

如果你追求更加極致的性能,可以考慮使用 asm 實(shí)現(xiàn)的模塊,該實(shí)現(xiàn)性能優(yōu)于 spring BeanUtils 35% 左右。

特性

  • 支持對(duì)象屬性的淺拷貝

  • 支持不同名稱(chēng)字段的指定賦值

  • 支持自定義字段屬性賦值的條件,比如目標(biāo)字段不為 null 才進(jìn)行賦值

  • 支持自定義字段值轉(zhuǎn)換,可以轉(zhuǎn)換為其他類(lèi)型,或者相同類(lèi)型

  • 支持屬性字段為【對(duì)象】【集合】【數(shù)組】的賦值,對(duì)象賦值更加方便。

  • 支持基于 asm 實(shí)現(xiàn)的高性能復(fù)制

快速開(kāi)始

準(zhǔn)備

JDK1.7 及其以上版本

Maven 3.X 及其以上版本

maven 項(xiàng)目依賴(lài)

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>bean-mapping-core</artifactId>
    <version>0.2.5</version>
</dependency>

核心類(lèi)說(shuō)明

BeanUtil

提供一個(gè)簡(jiǎn)單的靜態(tài)方法 copyProperties。

/**
 * 復(fù)制屬性
 * 將 source 中的賦值給 target 中名稱(chēng)相同,且可以賦值的類(lèi)型中去。類(lèi)似于 spring 的 BeanUtils。
 * @param source 原始對(duì)象
 * @param target 目標(biāo)對(duì)象
 */
public static void copyProperties(final Object source, Object target)

測(cè)試代碼參考

詳情參見(jiàn) bean-mapping-test 模塊下的測(cè)試代碼。

示例代碼

對(duì)象的定義

  • BaseSource.java & BaseTarget.java

其中 BaseSource 對(duì)象和 BaseTarget 對(duì)象的屬性是相同的。

public class BaseSource {

    /**
     * 名稱(chēng)
     */
    private String name;

    /**
     * 年齡
     */
    private int age;

    /**
     * 生日
     */
    private Date birthday;

    /**
     * 字符串列表
     */
    private List<String> stringList;

    //getter & setter
}

屬性賦值測(cè)試案例

我們構(gòu)建 BaseSource 的屬性,然后調(diào)用

BeanUtil.copyProperties(baseSource, baseTarget);

類(lèi)似于 spring BeanUtils 和 Apache BeanUtils,并驗(yàn)證結(jié)果符合我們的預(yù)期。

    /**
     * 基礎(chǔ)測(cè)試
     */
    @Test
    public void baseTest() {
        BaseSource baseSource = buildBaseSource();
        BaseTarget baseTarget = new BaseTarget();
        BeanUtil.copyProperties(baseSource, baseTarget);

        // 斷言賦值后的屬性和原來(lái)相同
        Assertions.assertEquals(baseSource.getAge(), baseTarget.getAge());
        Assertions.assertEquals(baseSource.getName(), baseTarget.getName());
        Assertions.assertEquals(baseSource.getBirthday(), baseTarget.getBirthday());
        Assertions.assertEquals(baseSource.getStringList(), baseTarget.getStringList());
    }

    /**
     * 構(gòu)建用戶(hù)信息
     * @return 用戶(hù)
     */
    private BaseSource buildBaseSource() {
        BaseSource baseSource = new BaseSource();
        baseSource.setAge(10);
        baseSource.setName("映射測(cè)試");
        baseSource.setBirthday(new Date());
        baseSource.setStringList(Arrays.asList("1", "2"));
        return baseSource;
    }

asm 復(fù)制

簡(jiǎn)介

有時(shí)候我們對(duì)于性能要求較高,而對(duì)便利性要求沒(méi)有這么高。

本框架也提供了基于 asm 的復(fù)制方式,性能比 spring 好 35% 左右。

見(jiàn)文末的 benchmark。

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>bean-mapping-asm</artifactId>
    <version>0.2.5</version>
</dependency>

測(cè)試代碼

BeanUtil#copyProperties(Object, Object) 使用類(lèi)似,但是暫時(shí)不支持注解等更加豐富的功能。

BaseSource baseSource = buildBaseSource();
BaseTarget baseTarget = new BaseTarget();
AsmBeanUtil.copyProperties(baseSource, baseTarget);

拓展閱讀

實(shí)際工作中,我們遇到的情況會(huì)比這個(gè)復(fù)雜一些。

比如兩個(gè)字段名稱(chēng)不同,我們也想進(jìn)行賦值,值得處理轉(zhuǎn)換等等。

深入學(xué)習(xí)

Bean-Mapping 相關(guān)文檔:

01-項(xiàng)目模塊簡(jiǎn)介和預(yù)期功能

02-BeanMapping 注解的引入

03-不同名稱(chēng)字段的指定賦值

04-自定義賦值生效的條件

05-自定義字段轉(zhuǎn)換實(shí)現(xiàn)

06-支持屬性字段為【對(duì)象】【集合】【數(shù)組】的賦值

07-BeanUtil#copyProperties(Object, Class) 方法

性能

對(duì)比圖

基于 asm 實(shí)現(xiàn)比 spring BeanUtils 性能更好的屬性拷貝框架

可見(jiàn)框架默認(rèn) bean-mapping 實(shí)現(xiàn)性能一般,涉及到了太多的特性,導(dǎo)致復(fù)制性能略低于 spring。

基于 reflectasm 實(shí)現(xiàn)的 asm-bean-mapping 的性能高于 spring。

代碼示例參見(jiàn) BeanUtilBeanchmarkTest.java

展望

相對(duì) BeanCopier 這種實(shí)現(xiàn)方式,我們的實(shí)現(xiàn)方式性能還是有很大提升空間。

后期可以考慮實(shí)現(xiàn)類(lèi)似 BeanCopier 的方式。

開(kāi)源地址

這個(gè)框架的源代碼全部開(kāi)源,也便于我們學(xué)習(xí)。

Bean-Mapping

名稱(chēng)欄目:基于asm實(shí)現(xiàn)比springBeanUtils性能更好的屬性拷貝框架
轉(zhuǎn)載來(lái)于:http://aaarwkj.com/article36/gpjpsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、建站公司、云服務(wù)器、商城網(wǎng)站、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
粉嫩av北条麻妃电影| 人成在线免费视频网站| 日韩高清不卡免费视频| 日韩性视频激情在线一区| 日本在线中文字幕乱码| 国产精品一区二区激情视频| 后入动漫视频在线观看| 亚洲乱码在线中文字幕| 成人性生交大片免费看中文| 欧美高清在线观看一区二区 | 欧美亚洲综合激情在线| 自拍偷拍一区蜜桃视频| 成人欧美精品一区二区不卡| 欧美黄色日本一区二区| 欧美三级特黄在线播放| 日本少妇三级网站大全| 日韩在线视频网站不卡| 国产美女被狂操到高潮| 亚洲精品中文字幕一二三| 日本免费一区二区三区四区视频| 日本精品在线一区二区| 变态另类专区一区二区三区| 欧美另类精品一区二区三区| 免费在线观看污污污网站| 欧洲亚洲国产一区二区| 日韩三级av在线免费观看| 日本91大神在线观看| 亚洲天堂欧美天堂淫人天堂| 国产美女被狂操到高潮| 超碰免费在线公开97| 欧美精品一区二区毛卡片| 色香蕉精品国产综合| 日本一区二区三区精彩视频| 国产日韩精品一区二区三区在线| 91女厕偷拍女厕偷拍| 91伊人激情综合久久| 视频一区二区视频三区| 国产一区二区三区av网站| 日韩精品色av一区二区| 成年人正常性生活频率| 日韩性视频激情在线一区|