五个Java开发者不可不知的编程库

有经验的Java开发者有个特点是善于利用现有的轮子来构建汽车,而不是反复造轮子。如今的Java生态系统已经非常成熟。

成都创新互联公司服务项目包括青白江网站建设、青白江网站制作、青白江网页制作以及青白江网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,青白江网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到青白江省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

在Java快速发展的几十年中,涌现出许多优秀的开源项目。在大多数情况下,我们可以在开源社区中找到合适的开源库。

许多开发者已经使用和测试了这些库,通常它们具有良好的性能和稳定性。合理地使用这些优秀的开源组件可以节省大量时间,让你有更多的时间去做其他事情。在本文中,将分享一些Java开发者应该熟悉的开源类库。

1 Orika

Orika是一个Java bean映射工具,可以递归地将数据从一个对象复制到另一个对象。在编写代码时,我们通常会发现需要将对象转换为不同的格式以适应不同的API,例如将DTO转换为POJO或POJO转换为VO。通常,我们需要通过getter/setter完成此操作。Orika可以通过简单的代码为您解决这个烦恼,而且性能损失不大。

Maven依赖项:


    ma.glasnost.orika
    orika-core
    1.4.6

示例代码:

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依赖项:


    com.github.ben-manes.caffeine
    caffeine
    2.9.0

示例代码:

Cache 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依赖项:


    com.esotericsoftware
    kryo
    5.2.0

示例代码:

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 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依赖项:

org.redisson
    redisson
    3.16.2

示例代码:

//获取和设置键值对
RBucket nameRBucket =  redisson.getBucket("username");
nameRBucket.set("lance", 60, TimeUnit.SECONDS);
redisson.getBucket("username").get();

//操作哈希表
RMap 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 usernames = redisson.getList("usernames");
users.add("lance");

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

以上是推荐的五个优秀的开源Java库,上面的代码只是一个演示,如果您真的想在生产环境中使用它们,您需要根据您的项目情况进行打包。希望在阅读本文后,您可以应用到您的项目中。

本文名称:五个Java开发者不可不知的编程库
分享网址:http://www.shufengxianlan.com/qtweb/news19/247719.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联