25天前,James Gosling建立了Java,并总有一天地改变了程式设计语言的疆域。与很多其他程式设计语言不同,Java在整个开发周期中都受到业内的度热烈欢迎和需求。
Java具有非常杰出的Core库,提供更多了许多基本要素。 如前所述其度盛行病,因而也存在很多成形而强悍的Java库。 做为求真务实的应用软件设计者,在业务合作开发过程中, 为了解决常用或多次重复出现的问题,应该尽可能采用成形的库,而不是重新发明者车轮。
在这首诗中,我想介绍另外25个Java库来欢庆Java的25十周年。这些库基本都是成形而且崇高品德的,可以为Java应用软件设计中可能碰到的示例提供更多可信的应用软件系统。
RxJava
Reactive Extensions(ReactiveX)是一类盛行的应用软件设计实例,用作处理触发器和设计商业模式的程式设计。 RxJava是采用Observables的Reactive Extensions的Java VM同时实现。RxJava以新闻稿方式在事件/统计数据字符串上加进可女团操作符,从而扩充了观测者商业模式以全力支持设计商业模式的程式设计。 此外,它还暗藏了譬如多处理器、内存安全,并行和mammalian统计计算机程序等等的下层复杂程度。
如果你想在Java中展开积极响应式程式设计,那么这是一个不可或缺的库。
Link:
OkHttp
到为止,HTTP是最常用的网络层协定。因而有很多杰出的如前所述java的HTTP应用程序库,而OkHttp算得上是其中最简单但使用方便的一个HTTP库。它提供更多了简洁,整洁的API,可用作在Java中合作开发HTTP应用程序。
它还全力支持一些高阶优点:连接池、GZIP填充、积极响应内存、现代TLS优点等等。
Link:
square/okhttpSee
MyBatis
在多数应用软件产品中,都须要对统计数据展开储存。而在为数众多统计数据储存计划中,SQL仍是最常用的储存类型。做为Java合作开发者,须要将Java第一类与SQL表相匹配。有一类同时实现此映射的方法是采用ORM(如Hibernate),但是在很多情景中——比如说操控性情景,合作开发者希望完全控制第一类-表态射。在这种情况下,你可以直接采用JDBC并编写SQL查询。另一类方式就是MyBatis将Java第一类态射到储存过程或SQL语句,其中提供更多了如前所述注释的态射和如前所述XML描述符的态射。
投入更多精力展开业务逻辑的合作开发。
Link:
HikariCP
HikariCP也是与统计数据库相关的库。建立JDBC连接是非常消耗资源的操作,如果每次访问统计数据库时都建立一个新连接,采用结束之后将其关闭,这会严重影积极响应用程序的操控性;更不用说未正确关闭的或者不限制数量的统计数据库连接都可能会使你的应用崩溃。
采用连接池意味着每次请求连接时将重用连接,而不是建立新连接。HikariCP是JVM中一个非常快但轻量级的统计数据库连接池,它也是一个非常可信的“零开销” JDBC连接池。
Link:
Lombok
Java经常被批评为是冗长和臃肿的编程语言。与其他盛行程式设计语言(JavaScript、Python、Scala、Kotlin等)相比,合作开发者采用Java合作开发时,须要编写大量的样板代码。尽管Java在JDK 15中引入了Records来减少Java中的样板代码,但JDK 15不是LTS版本。 幸运的是,有一个库可以大大减少Java中的样板代码: Lombok。通过采用Lombok库,你可以通过加进一些注释来生成getter、setter、hashcode、equals、toString、Builder类。此外,它还提供更多了空指针检查、日志记录等更多功能。
Link:
VAVR
在JDK 8中,Java终于Lambda和Streaming发布了人们期待已久的函数式程式设计。如果你之前已经习惯了函数式程式设计,或者希望深入研究函数式程式设计,你可能会发现Java中的函数式程式设计功能很匮乏。与其它的函数式程式设计语言(Haskell、Scala)相比,Java的函数式程式设计功能显得很苍白。VAVR库则可以填补Java中函数式程式设计优点的空白,其中提供更多了持久的集合、用作错误处理的函数式抽象、mammalian程式设计、商业模式相匹配等。
Link:
Gson
多年来,JSON已成为事实上的统计数据交换格式。 在Java中,也有一些处理JSON的杰出库,包括非常有名的Jackson和FastJson。还有一个出色的库就是Google的Gson, 与Jackson不同,这是一个很简约的库,仅全力支持JSON。 它提供更多统计数据绑定、广泛的通用全力支持、灵活的自定义。 Gson的主要优点(或者说缺点,取决于你自己的喜好)之一是不须要注解。
Link:
google/gson
jsoup
它同时实现了WHATWG HTML5规范,并采用最佳的HTML5 DOM方法解析HTML。 它全力支持从URL 或字符串解析HTML、查找和提取统计数据、操纵HTML元素、清理HTML、输出HTML等。
Link:
JIB
如果你在合作开发企业级应用程序,那么它至少应该全力支持云部署。服务上云准备工作的第一步就是,将应用程序容器化,也就是将你的artifactory二进制文件放入Docker镜像中。对Java程序展开容器化的工作有点繁琐:你须要对Docker有深入的了解,须要建立Dockerfile,还须要Docker Daemon。幸运的是,对于Java合作开发者而言,Google采用现有工具建立了一个开源的Java容器化程序。 您可以将JIB用作Java库来构建优化的Docker和OCI镜像。
Link:
Tink
Tink是出自Google的另一个方便的Java库。密码学和安全性在应用软件设计中变得越来越重要。加密技术用作保护用户统计数据。正确实施加密须要大量的专业知识和精力。 Google的一组密码学家和安全工程师编写了多语言密码库Tink。 它提供更多了易于采用但不易误用的安全API。Tink通过不同的原语提供更多加密功能。 它提供更多对称密钥加密,流对称密钥加密,确定性对称密钥加密,数字签名,混合加密以及很多其他加密功能。
Link:
google/tink
Webmagic
如果您从事Web信息提取,您可以编写自己的爬虫程序,这既费时又乏味。在Java中,Webmagic是一个杰出的Web爬虫库,涵盖了爬虫的整个开发周期:下载、URL管理、内容提取和持久性。它提供更多了一个简单而灵活的核心、注释全力支持、多处理器和易于采用的API。
Link:
ANTLR 4
如果您的工作是解析和处理统计数据,那么ANTLR库会非常方便。它是一个强悍的解析器生成器,用作读取、处理、执行或翻译结构化文本或二进制文件。它通过使我们能够访问语言处理原语(例如词法分析器、语法、解析器和运行时)来对其展开处理,从而同时实现对统计数据的处理。
它通常用于构建工具和框架。
Link:
Caffeine
如果您的应用程序中存在大量读操作,则内存可以大大提高您的应用程序的统计数据访问操控性。 Java有很多很棒的内存库,Caffeine是其中最好的。 它是一个如前所述Java的高操控性、近乎最佳的内存库。它提供更多了一个简洁的内存API和一些高阶优点,如触发器加载项、触发器刷新、弱引用键等。
Link:
Metrics
Java应用程序投入生产后,您将须要深入了解应用程序的关键组件。 Dropwizard框架中的Metrics是一个简单而引人注目的Java库,可提供更多对您的应用程序和JVM KPI的监控,例如,事件发生率、挂起的作业、服务运行状况检查等。 它是模块化的,并为其它库/框架提供更多监控模块。
Link:
gRPC-Java
谷歌在2015年建立了gRPC做为一个现代远程过程调用系统。此后,gRPC变得非常盛行,并且是现代应用软件设计中采用最广泛的RPC系统之一。 gRPC-Java库是gRPC应用程序的Java同时实现。 如果要在Java中采用gRPC,则该库会为您带来很多方便。
Link:
grpc/grpc-java
Java WebSocket
传统的应用程序-服务器通信是单向的。WebSocket是通过单个TCP连接的双向通信协定。 Java WebSocket是Java完成的准系统级的WebSocket服务器和应用程序同时实现。 如果您是Java合作开发者,并且想采用WebSocket,那么强烈推荐您采用此库。
Link:
JJWT
JSON Web令牌(JWT)是现代应用软件设计中事实上的授权和安全信息交换格式。无论您采用的是简单的如前所述会话的授权还是高阶的如前所述OAuth2的授权,都可能采用JWT。JJWT是一个简单的Java库,用作在Java和JVM环境中建立和验证JWT。其中所有已同时实现功能都完全符合对应的RFC规范,而且提供更多了可读性强且方便的流利API。
Link:
Swagger-Core
OpenAPI是机器可读接口文件的规范,用作描述、产生、采用和可视化RESTful Web服务。 Swagger-Core是OpenAPI规范的Java同时实现。 如果要在Java或JavaEE应用程序中公合作开发布REST API,则可以采用Swagger-Core自动提供更多并公开API定义。
Link:
Async Http Client
由于触发器程式设计的非阻塞优点,它最近变得越来越盛行。大多数盛行的Java HTTP应用程序库都受限于未提供更多对触发器HTTP积极响应的处理。Async Http Client是一个盛行的Java库,提供更多触发器HTTP积极响应处理,此外,该库还全力支持WebSocket协定。
Link:
AsyncHttpClient/async-http-client
Liquibase
做为应用软件设计者,我们都知道代码的版本控制、DevOps和CI/CD的重要性。在博客文章:Evolutionary Database Design中,Martin Fowler指出,我们须要对代码展开版本控制和CI/CD。Liquibase是一个工具,它全力支持对Java应用程序中的SQL统计数据库更改展开跟踪、版本控制和部署。如果你采用的是SQL统计数据库,并且统计计算机程序正在不断调整,那么这个工具可以极大地简化统计数据库迁移过程。
Link:
Liquibase | Open Source Version Control for Your Database
Springfox
我已经在前面列出了Swagger-Core,它可以自动为原始Java或Java EE应用程序生成REST API文档。 在企业应用程序合作开发中,Spring MVC已超过Java EE,成为排名第一的应用程序合作开发平台。 在如前所述Spring的Java应用程序中,Springfox库可以从源代码自动生成REST API文档。
Link:
springfox/springfox
JavaCV
OpenCV是一个计算机视觉和机器学习应用软件库。它是开源的,旨在为计算机视觉应用程序提供更多一个通用的基础设施。JavaCV是对计算机视觉领域中OpenCV和很多其他盛行库(FFmpeg、libdc 1394、PGR FlyCapture)的一个封装。JavaCV还具有硬件加速的全屏图像显示,用作在多核上并行执行代码的简便方法,用户友好的相机和投影仪的几何和颜色校准,特征点的检测和相匹配以及很多其他功能特征。
Link:
Joda Time
在java8之前的核心库中,Java的日期和时间功能很糟糕。Java8在其java.time包中发布了急需的高阶日期和时间功能。 如果您正在采用Java的旧版本(Java8之前的版本),则Joda time可以为您提供更多高阶的日期和时间功能。 但是,如果您采用的是Java的较新版本,那就不须要此库。
Link:
Wiremock
HTTP是现代应用程序合作开发中最受热烈欢迎的传输协定,而REST是如前所述微服务的应用程序合作开发中事实上的通信协定。在编写单元测试期间,最好专注于SUT(被测系统)并模拟SUT中采用的服务。Wiremock是REST API的模拟器,使合作开发者可以针对不存在或不完整的API编写代码。 在如前所述微服务的应用软件设计中,Wiremock可以大大提高合作开发速度。
Link:
MapStruct
在Java应用程序合作开发中,通常须要将一类类型的POJO转换为另一类类型的POJO。 同时实现此POJO或Bean转换的一类方法是显式地编写转换逻辑,这会导致代码很繁琐。 还有一个明智的方法是采用专门合作开发的库来转换POJO / Bean。 MapStruct是一个代码生成器,它根据配置方法上的约定在POJO / Bean之间同时实现态射。 生成的映射代码直接采用简单的方法调用,因而是快速、类型安全且易于理解的。
Link:
总结
当然,对于像Java这样大型的应用软件生态系统,这个列表是根本无法完全涵盖的。有很多杰出的Java库我没有在这里列出,也都值得一试。但是,这个列表可以帮助您快速了解Java生态系统。
参考:
https://towardsdatascience.com/25-lesser-known-java-libraries-you-should-try-ff8abd354a94