Java 开发人员必知的常用类库,这些你都知道吗?
作为一名程序员,我们要避免重复发明轮子,尽可能使用一些成熟、优秀、稳定的的第三方库,站在巨人的肩膀上搭建可靠、稳定的系统。本篇我整理了 Java 开发人员经常会使用到的第三方类库,可能不是很全面,还在持续收集整理中,朋友们可以关注我的 GitHub 上的持续更新,GitHub 搜 wind7rui/Javalib,或者点击链接https://github.com/wind7rui/Javalib,然后点击 watch/Star/Fork,如果您对项目中的内容有建议或者意见,欢迎提出专业方面的建议,共同维护,请直接在 GitHub 上以 issue 或者 PR 的形式提出,以下我们开始本篇的内容。
应用开发脚手架
1.Spring Framework
Spring 框架为现代基于 Java 的企业应用程序提供了一个全面的编程和配置模型,使用开发基于 Java 语言的应用更加简单、便捷。
github:https://github.com/spring-projects/spring-framework/
官网:https://spring.io/projects/spring-framework
2.Spring Boot
Spring Boot 使创建独立的、基于 Spring 的产品级应用程序变得非常容易。
官网:https://spring.io/projects/spring-boot
3.Spring Cloud Spring Cloud 为开发人员提供了丰富的使用工具,开发人员基于这些工具可以快速构建分布式系统中的一些常见功能(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话等)。
官网:https://spring.io/projects/spring-cloud
Web 服务接口
1.Jersey
Jersey 是一个 REST 框架,它提供 JAX-RS 参考实现等。Jersey 提供了自己的 api,这些 api 通过附加的特性和实用程序扩展了 JAX-RS 工具包,从而进一步简化了 RESTful 服务和客户端开发。Jersey 还公开了许多扩展 spi,以便开发人员可以扩展 Jersey 以最适合他们的需求。
github:https://github.com/eclipse-ee4j/jersey
2.Spring Web MVC
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就已包含在 Spring 框架中。正式名称“ Spring Web MVC”来自其源模块的名称(spring-webmvc),但通常称为“Spring MVC”。
官网:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/web.html
数据持久化框架
1.MyBatis
MyBatis 是一个一流的持久性框架,支持自定义 SQL、存储过程和高级映射,它几乎消除了 JDBC 代码、参数手动设置和结果检索。MyBatis 可以使用简单的 XML 或注释进行配置,并将原语、接口和 javapojo(普通的旧 Java 对象)映射到数据库记录。
官网:https://mybatis.org/mybatis-3/
github:https://github.com/mybatis/mybatis-3
2.Hibernate
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架,hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
Excel 读写
1.Alibaba EasyExcel
Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但 POI 还是有一些缺陷,比如 07 版 Excel 解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel 重写了 poi 对 07 版 Excel 的解析,能够原本一个 3M 的 excel 用 POI sax 依然需要 100M 左右内存降低到几 M,并且再大的 excel 不会出现内存溢出,03 版依赖 POI 的 sax 模式。在上层做了模型转换的封装,让使用者更加简单方便。
github:https://github.com/alibaba/easyexcel
2.Apache POI
一个用于读写 Microsoft Office 二进制和 OOXML 文件格式的 Java 库,可用于读写 Excel 97-2008。
github:https://github.com/apache/poi
CSV 读写
1.Apache Commons CSV
Apache Commons CSV 库提供了用于读取和写入各种类型 CSV 文件的接口。
github:https://github.com/apache/commons-csv
2.Java CSV
Java CSV 是一个小型、快速且开源 Java 库,用于读、写各种 CSV 文件。
官网:https://www.csvreader.com/java_csv.php
API:http://javacsv.sourceforge.net/
3.Super CSV
Super CSV 是一个快速、免费跨平台的 CSV 格式数据的读写库,可以方便的处理对象、Map、列表的读写操作,以及自动化的类型转换和数据检查功能。
官网:http://super-csv.github.io/super-csv/index.html
github:https://github.com/super-csv/super-csv
JSON 读写
1.Jackson
Jackson 被称为 Java 的标准 JSON 库,号称“Java 的最佳 JSON 解析器”。
github:https://github.com/FasterXML/jackson
2.Gson
Gson 是谷歌开源的一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可以用于将 JSON 字符串转换为等效的 Java 对象。Gson 可以处理任意 Java 对象,包括您没有源代码的现有对象。
github:https://github.com/google/gson
3.fastjson
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
github:https://github.com/alibaba/fastjson
XML 读写
1.dom4j
dom4j 是用于处理 XML 的开源框架,该框架与 XPath 集成在一起,并完全支持 DOM、SAX、JAXP 和 Java 平台。
github:https://github.com/dom4j/dom4j
2.StAX
StAX 全称 Streaming API for XML,一种全新的、基于流的 Java XML 解析标准类库。
3.jaxb-api
jaxb-api 用于执行 XML 文档和 Java 对象之间的映射。
文档:https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/JAXB.html
4.XStream
XStream 是一个可以轻易的将 Java 对象和 xml 文档相互转换的类库。
IO 读写
1.Apache Commons IO Apache Commons IO 是一个实用程序库,可协助开发 IO 功能。
官网:https://commons.apache.org/proper/commons-io/
2.Okio
Okio 是对 java.io 和 java.nio 的补充,使访问、存储和处理数据变得更加容易。
github:https://github.com/square/okio
HTTP 客户端
1.OkHttp
OkHttp 是一个 HTTP 客户端,使用 OkHttp 很容易,它的请求/响应 API 具有流畅的构建器和不变性。它支持同步阻塞调用和带有回调的异步调用。
github:https://github.com/square/okhttp
官网:https://square.github.io/okhttp/
2.Apache HttpClient
Apache HttpClient 提供了对基本 HTTP 协议的强大支持,用于构建基于 HTTP 的客户端。
官网:http://hc.apache.org/index.html
github:https://github.com/apache/httpcomponents-client
Java Bean 复制
1.Cglib BeanCopier
Cglib 库内的 BeanCopier 提供了 ava Bean 到 Java Bean 的复制功能,性能优于 Spring BeanUtils。
2.Spring BeanUtils
Spring 框架的 Spring Beans 库中的 BeanUtils 也实现了 Java Bean 到 Java Bean 的复制。
3.Dozer
Dozer 是 Java Bean 到 Java Bean 映射器,它以递归方式将数据从一个对象复制到另一个对象。Dozer 支持简单属性映射、复杂类型映射、双向映射、隐式显式映射以及递归映射。Dozer 不仅支持属性名称之间的映射,而且还可以在类型之间自动转换。开箱即用地支持大多数转换方案,同时也允许您通过 XML 或基于代码的配置指定自定义转换。
github:https://github.com/DozerMapper/dozer
文档:https://dozermapper.github.io/gitbook/
Redis 客户端
1.Redission
Redis 推荐的 Java 客户端 Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid),它充分利用了 Redis 键值数据库提供的一系列优势,基于 Java 实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类,让使用 Redis 更加简单、便捷,从而让使用者能够将更多精力集中到业务逻辑处理上。
github:https://github.com/redisson/redisson/
2.Jedis
Redis 推荐的 Java 客户端。
github:https://github.com/xetorthio/jedis
数据库连接池
数据库连接池提供了一套高效的连接分配、使用策略, 最终实现连接的高效管理。
1.HikariCP
快速、简单、可靠。HikariCP 是“零开销”生产就绪的 JDBC 连接池。
github:https://github.com/brettwooldridge/HikariCP
2.Druid
Druid 是 Java 语言中最好的数据库连接池之一,Druid 能够提供强大的监控和扩展功能。
github:https://github.com/alibaba/druid/
3.Tomcat JDBC
JDBC 连接池是 Apache Commons DBCP 连接池的替代品。
官网:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
网络编程
1.Netty
Netty 是一个广泛使用的 Java 网络编程框架。
github:https://github.com/netty/netty
文件上传
1.Apache Commons FileUpload
Apache Commons FileUpload 使高性能的文件上传功能变得容易。
官网:http://commons.apache.org/proper/commons-fileupload/
发送邮件
1.Apache Commons Email
Apache commons Email 旨在提供用于发送电子邮件的 API,它建立在 Java Mail API 之上,它的目标就是简便。
官网:http://commons.apache.org/proper/commons-email/
编码和解码
1.Apache Commons Codec
Apache Commons Codec 提供了常见编码器和解码器的实现,例如 Base64,Hex,Phonetic 和 URL。
官网:http://commons.apache.org/proper/commons-codec/
IO 操作
1.Apache Commons IO
简单、快捷的 IO 操作。
官网:http://commons.apache.org/proper/commons-io/index.html
对象池
1.Apache Commons Pool
提供了通用对象池。
官网:http://commons.apache.org/proper/commons-pool/
java.lang 包工具类
1.Apache Commons Lang
为 java.lang 中的类提供额外的功能,例如 StringUtils、DateUtils、RandomUtils、FastDateFormat(线程安全版本的 SimpleDateFormat)。
官网:http://commons.apache.org/proper/commons-lang/index.html
集合操作
1.Apache Commons Collections
集合相关操作工具类。
官网:http://commons.apache.org/proper/commons-collections/
2.Guava
Guava 是 Google 的一组核心 Java 库,除了可以操作我们常用的集合类型之外,还可以操作新的集合类型(例如多图和多集)和不可变的集合。
github:https://github.com/google/guava
全能型工具类
1.Guava
Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如多图和多集),不可变的集合,图形库以及用于并发,I / O,哈希,缓存,基元,字符串等的实用程序!它广泛用于 Google 的大多数 Java 项目中,也被许多其他公司广泛使用。
github:https://github.com/google/guava
2.Hutool
Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。
github:https://github.com/looly/hutool
日期和时间操作
1.Joda-Time
Joda-Time 提供了 Java 日期和时间类的质量替代。
官网:https://www.joda.org/joda-time/
单元测试
1.JUnit
2.Mockito
Mockito 是一个 Java 单元测试模拟框架。
3.PowerMock
PowerMock 也是一个 Java 单元测试模拟框架,它可以模拟静态方法、构造函数、最终类和方法、私有方法、删除静态初始化器等。
官网:http://powermock.github.io/
4.moco
在日常接口测试的工作中,经常需要依赖其他系统的 API,但是联调不常有,只能自己通过 mock 完成数据依赖。Moco 是一个模拟服务器端服务的项目,可以用于测试打桩。
github:https://github.com/dreamhead/moco
安全框架
1.Apache Shiro
Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它用于身份验证、授权、加密和会话管理。使用 Shiro 易于理解的 API,可以快速轻松地保护任何应用程序,从最小的移动应用程序到最大的 Web 和企业应用程序。
日志
1.SLF4J + Logback
SLF4J 是为各种 loging APIs 提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的 loging APIs 实现,它是一个日志接口。
Logback 是由 log4j 创始人设计的又一个开源日志组件,它是一个日志的实现。
SLF4J 官网:http://www.slf4j.org/
Logback 官网:https://logback.qos.ch/
对象池
1.Apache Commons Pool
Apache Commons Pool 提供了对象池 API 和一系列对象池实现。
官网:https://commons.apache.org/proper/commons-pool/
基本网络通讯
1.Apache Commons Net
Apache Commons Net 库实现了许多基本互联网协议的客户端。该库的目的是提供基本协议访问,而不是更高级别的抽象。
官网:http://commons.apache.org/proper/commons-net/index.html
作业调度框架(定时任务)
1.Quartz
Quartz 是一个开源的作业调度框架,它完全由 Java 编写,能够用它来为执行一个作业而创建简单的或复杂的调度。
官网:http://www.quartz-scheduler.org/
github:https://github.com/quartz-scheduler/quartz
2.ElasticJob
ElasticJob 是一种分布式调度解决方案,解决了 Quartz 不支持分布式的弊端。Elastic job 主要的功能有支持弹性扩容,通过 Zookepper 集中管理和监控 job,支持失效转移等。
github:https://github.com/apache/shardingsphere-elasticjob
配置中心
1.Nacos
Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 的动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
github:https://github.com/alibaba/nacos
2.Spring Cloud Config
Spring Cloud Config 为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Config Server,您可以在中心位置管理所有环境中应用程序的外部属性。
文档:https://cloud.spring.io/spring-cloud-config/reference/html/
3.Apollo
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
github:https://github.com/ctripcorp/apollo
限流
1.Guava RateLimiter
RateLimiter 基于令牌桶算法,即以用户设定的恒定速率向令牌桶内放置令牌,用户来执行任务时,只有拿到令牌才能执行。
2.Sentinel
Sentinel 是面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。
github:https://github.com/alibaba/Sentinel
熔断降级
当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。
1.Sentinel
Sentinel 通过并发线程数进行限制和通过响应时间对资源进行降级两种手段对资源调用进行限制,让请求快速失败,避免影响到其它的资源。
github:https://github.com/alibaba/Sentinel
2.Hystrix
Hystrix 通过线程池的方式,来对资源进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。Hystrix 不再处于主动开发中,并且当前处于维护模式,官方推荐使用 Resilience4j 替代。
github:https://github.com/Netflix/Hystrix
3.Resilience4j
Resilience4j 是受 Netflix Hystrix 启发的轻量级容错库,但专为 Java 8 和函数式编程而设计。轻巧,因为该库仅使用 Vavr,而 Vavr 没有任何其他外部库依赖项。
github:https://github.com/resilience4j/resilience4j
分库分表
1.Apache ShardingSphere
Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。支持数据分片、读写分离、多数据副本、数据加密、影子库压测等功能。
官网:https://shardingsphere.apache.org/
github:https://github.com/apache/shardingsphere
2.Mycat
Mycat 是数据库分库分表中间件。
github:https://github.com/MyCATApache
序列化
1.Kryo
Kryo 是用于 Java 的快速高效的二进制对象图序列化框架。该项目的目标是高速,小尺寸和易于使用的 API。每当需要将对象持久保存到文件,数据库还是通过网络时,该项目都是有用的。
github:https://github.com/EsotericSoftware/kryo
2.Hessian
Hessian 是一款支持多种语言进行序列化操作的框架技术,同时在进行序列化之后产生的码流也较小,处理数据的性能方面远超于 java 内置的 jdk 序列化方式。
3.Protobuf
Protobuf 是谷歌开源的一个灵活的、高效的用于序列化数据的协议。相比较 XML 和 JSON 格式,protobuf 更小、更快、更便捷。
github:https://github.com/protocolbuffers/protobuf
官网:https://developers.google.com/protocol-buffers/
RPC 框架
1.Dubbo Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
官网:http://dubbo.apache.org/zh-cn/
github:https://github.com/apache/dubbo
2.Thrift Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。Thrift 最初由 facebook 开发,07 年四月开放源码,08 年 5 月进入 apache 孵化器,现在是 Apache 基金会的顶级项目。Thrift 允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。
3.gRPC gRPC 是一个现代的、开源的、高性能的远程过程调用(RPC)框架,可以在任何地方运行。gRPC 使客户机和服务器应用程序能够透明地通信,并简化了连接系统的构建。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C#支持。
github:https://github.com/grpc/grpc
学之多,而后知之少!朋友们【点赞+评论+转发】是我持续更新的最大动力,我们下期见!
评论