成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五個Java開發者不可不知的編程庫

開發 開發工具
Orika是一個Java bean映射工具,可以遞歸地將數據從一個對象復制到另一個對象。在編寫代碼時,我們通常會發現需要將對象轉換為不同的格式以適應不同的API,例如將DTO轉換為POJO或POJO轉換為VO。

有經驗的Java開發者有個特點是善于利用現有的輪子來構建汽車,而不是反復造輪子。如今的Java生態系統已經非常成熟。

在Java快速發展的幾十年中,涌現出許多優秀的開源項目。在大多數情況下,我們可以在開源社區中找到合適的開源庫。

許多開發者已經使用和測試了這些庫,通常它們具有良好的性能和穩定性。合理地使用這些優秀的開源組件可以節省大量時間,讓你有更多的時間去做其他事情。在本文中,將分享一些Java開發者應該熟悉的開源類庫。

1 Orika

Orika是一個Java bean映射工具,可以遞歸地將數據從一個對象復制到另一個對象。在編寫代碼時,我們通常會發現需要將對象轉換為不同的格式以適應不同的API,例如將DTO轉換為POJO或POJO轉換為VO。通常,我們需要通過getter/setter完成此操作。Orika可以通過簡單的代碼為您解決這個煩惱,而且性能損失不大。

Maven依賴項:

<dependency>
    <groupId>ma.glasnost.orika</groupId>
    <artifactId>orika-core</artifactId>
    <version>1.4.6</version>
</dependency>

示例代碼:

public class UserVo {
    private String username;

    private String phone;

//省略getter/setter
}

public class User {
    private String username;

    private String phone;

//省略getter/setter
}

public class OrikaTest {

    public static void main(String[] args) {
        User user = new User();
        user.setPhone("xxxxxx");
        user.setUsername("name");

        MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
        UserVo userVo = mapperFactory.getMapperFacade().map(user, UserVo.class);
        System.out.println("the copy object: "+userVo);
    }
}

Orika不僅可以復制簡單的Java對象,還可以復制集合。是不是很棒?

2 Caffeine

Caffeine是一個高性能的內存緩存類庫。Caffeine使用W-TinyLFU算法,其讀寫性能比guava更優秀。Spring 5已經將緩存的默認實現從guava改為了Caffeine。

圖片

Maven依賴項:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.9.0</version>
</dependency>

示例代碼:

Cache<String, String> cache = Caffeine.newBuilder()
                .maximumSize(10000)
                .expireAfterAccess(60, TimeUnit.SECONDS)
                //如果緩存為空,運行以下表達式并將其存儲在緩存中
                .build(key-> key+"test");

        String key2="test2";
        cache.put("test", "cache");
        //獲取緩存值,如果為空,則返回null
        log.info("key present: [{}] -> [{}]", k, cache.getIfPresent(k));
        log.info("key present: [{}] -> [{}]", key2, cache.getIfPresent(key2));
        //移除緩存
        cache.invalidate(k);

3 Kryo

Kryo是一個快速高效的Java對象序列化框架,具有高性能、序列化流小和簡單API等特點。目前,許多開源項目都在使用Kryo,例如Apache Hive和Apache Spark。以下是Kryo和主要序列化框架的性能比較。

圖片

圖片

Maven依賴項:

<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>5.2.0</version>
</dependency>

示例代碼:

public class KryoSerializer {

    private KryoFactory factory =()->{
        Kryo kryo = new Kryo();
        kryo.setDefaultSerializer(CompatibleFieldSerializer.class);
        kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
        return kryo;
    };

    private KryoPool pool = new KryoPool.Builder(factory).softReferences().build();


    public byte[] serialize(Object object) {
        return pool.run(kryo -> {
            try(Output output = new Output(2048,-1)) {
                kryo.writeClassAndObject(output,object);
                output.flush();
                return output.toBytes();
            }
        });
    }


    public <T> T deserialize(byte[] data) {
        try(Input input = new Input(data)) {
            return pool.run(kryo -> ((T) kryo.readClassAndObject(input)));
        }
    }
}

4 Netty

Netty是一個異步事件驅動的網絡應用程序框架,可用于快速開發和維護高性能協議服務器和客戶端。

在網絡編程領域,Netty絕對是占據主導地位的。基于Java NIO,Netty使用反應器線程模型,將客戶端連接綁定到特定線程,以避免IO線程頻繁上下文切換。

Netty中的所有IO操作都是異步的,并具有超高的性能。許多開源的Java項目都將Netty作為默認的通信層框架,例如下面要提到的Zookeeper、Elasticsearch和Redisson。

5 Redisson

Redisson采用基于NIO的Netty框架,不僅可以作為Redis的底層驅動客戶端,還可以以同步、異步、異步流或管道形式發送Redis命令、執行和處理Lua腳本以及處理返回結果。

在此基礎上,它還集成了更先進的應用解決方案,不僅將原生的Redis哈希、列表、集合、字符串和地理數據結構封裝為Java中最熟悉的數據結構,還實現了分布式鎖等高級應用場景。

Maven依賴項:

<groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.16.2</version>
</dependency>

示例代碼:

//獲取和設置鍵值對
RBucket<String> nameRBucket =  redisson.getBucket("username");
nameRBucket.set("lance", 60, TimeUnit.SECONDS);
redisson.getBucket("username").get();

//操作哈希表
RMap<String, String> userMap = redisson.getMap("user");
userMap.put("id", "1");
userMap.put("name", "lance");
userMap.put("age", "30");

userMap.expire(60, TimeUnit.SECONDS);
redisson.getMap("user").get("name");

//操作列表
RList<String> usernames = redisson.getList("usernames");
users.add("lance");

studentRList.expire(60, TimeUnit.SECONDS);
redisson.getList("usernames").get(0);

以上是推薦的五個優秀的開源Java庫,上面的代碼只是一個演示,如果您真的想在生產環境中使用它們,您需要根據您的項目情況進行打包。希望在閱讀本文后,您可以應用到您的項目中。

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2010-05-21 09:21:48

PHPPHP開發者

2015-05-25 19:13:13

KPI開發者

2023-06-08 13:10:04

2015-05-11 10:28:11

Web開發者編碼原則

2023-09-08 10:23:13

JavaScriptNPM模塊

2023-10-17 18:03:30

Code更改函數

2023-12-13 18:06:39

微服務設計模式

2015-06-10 10:56:50

iOS開發技巧

2024-03-21 08:57:39

語言軟件開發

2023-06-15 11:01:43

Java工具開源

2010-06-11 14:46:38

可路由協議

2024-08-20 00:00:05

2021-08-12 16:02:22

Jupyter NotPython命令

2023-12-16 22:21:42

Linux網絡命令

2020-11-30 13:12:04

Linux文本命令

2015-01-15 09:34:28

2016-01-05 16:05:56

BaaS后端云服務

2023-09-20 09:00:00

2023-11-13 14:19:57

Golang編程語言

2023-09-22 12:14:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黄色精品 | 久草在线 | www.精品一区 | 在线一区观看 | 中文字幕视频在线 | 亚洲精品中文字幕在线 | 日韩三级免费观看 | 久久综合久久综合久久 | 久久人爽 | 午夜成人在线视频 | 欧美中文一区 | 久久国产日本 | 色综久久| 亭亭五月激情 | 国产韩国精品一区二区三区 | 欧美男人的天堂 | 九九久久国产 | 日本久久视频 | 欧美色欧美亚洲另类七区 | 国产精品国产a | 一区观看 | 中文字幕一区二区三区四区五区 | 亚洲一页| 日韩精品专区在线影院重磅 | 久久国产欧美日韩精品 | 国产福利在线 | 精品久久精品 | 久久久久久亚洲精品 | 免费黄色网址视频 | 国产三级精品三级在线观看四季网 | 99re在线视频观看 | 日韩福利电影 | 欧美激情国产日韩精品一区18 | 欧美91| 天天看天天操 | 国产精品久久性 | 欧美成人猛片aaaaaaa | av一区二区三区 | 亚洲视屏| 中文字幕精品一区二区三区在线 | 狠狠的干 |