工作四年,分享15个对Java 程序员有用的库

本文涉及的产品
全局流量管理 GTM,标准版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 前言文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…种一棵树最好的时间是十年前,其次是现在

hi,各位小伙伴,我是小六六,今天呢?我给大家分享的是能够帮助我们更好的开发Java应用程序的库,只要用上了,你的开发效率至少提升十倍,让我们来看看它们分别是哪些库吧!


一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。 几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我们会经常的去忘记这些优秀的库,比如我经常在一些项目代码中看到如下代码


if(inputString == null || inputString.length == 0){......}
复制代码


除了字符串判断是否为空之外,还有很多字符串处理或其他数据类型判断的方法,缺少经验的程序员们往往都会想办法自己来写。这些代码当然都没有错,但我们应该尽可能去利用那些已经非常成熟的第三方库,以更标准的方式去解决这些通用的问题,并且提高开发效率。


在本文中,小六六将分享一些Java开发人员应该熟悉的最有用和最重要的库和API。但是没有并包含框架,类似于Spring这种

网络异常,图片无法展示
|


Java程序员20个有用的开源库


这是我收集的一些有用的第三方库,Java开发可以使用它们在应用中来完成许多有用的功能。要使用这些库,Java开发人员应该熟悉它,这就是本文的重点。如果你觉得有用,你可以研究该库并使用它。


Hutool


Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

网络异常,图片无法展示
|

小六六推荐语,我们平时有空的时候,多看看这些util这样我们写代码的时候就相当于有料了,会方便很多。


commons-lang3

Apache Commons Lang是Apache最著名的JAVA库 (GitHub上的代码库),它是对java.lang的很好扩展,包含了大量非常实用的工具类,其中用的最多的有StringUtils,DateUtils,NumberUtils等。之前提到的代码利用StringUtils可以改写为:

if(StringUtils.isBlank(inputString)){...}
复制代码

除了Apache Commons Lang,还有一些其他的Apache库也是对JAVA本身的很好补充,如Apache Commons CollectionApache Commons IOApache Commons Math


网络异常,图片无法展示
|


日志库

日志库非常常见,因为在每个项目中都需要它们。它们是服务器端应用最重要的东西,因为日志只放在可以看到应用程序当前运行时情况的地方。尽管JDK附带了自己的日志库,但还有更好的替代方案,例如Log4j,SLF4j和LogBack。

目前在Java项目中,用的最多的应该是例如Log4j  SLF4j和LogBack


JSON解析库

在当今的Web服务和物联网领域,JSON已成为将信息从客户端传送到服务器的首选协议。他们已经替换XML成为在独立平台间传输信息的最佳方式。

遗憾的是,JDK没有JSON库。但是,有许多优秀的第三方库允许你解析和创建JSON消息,如Jackson和Gson,FastJson

网络异常,图片无法展示
|


小六六说下自己的一些看法哈,就是你在项目中我觉得不管用哪一个库,你不应该直接引用它们的api,你应该自己封装一个你们项目的工具类,但是这些工具类,并不是让你去实现这些json转化,而是你用开源库去实现的,这样的一个好处就是,你以为要再项目中换一个库,会方便很多,也可以做统一的异常处理。


单元测试库

单元测试是将普通开发人员与优秀开发人员区分开来的最重要的事情。程序员经常有理由不写单元测试,但逃避写单元测试的最常见的借口是缺乏常用单元测试库的经验和知识,包括JUnit,Mockito和PowerMock。

说到单元测试!我不知道大家再项目中写不写,但是我觉得肯定很少人能把单元测试写到百分之90以上,就连spring的单元测试也不是百分之百!但是一般开发中,因为赶进度,各种原因,我们真的很少写,但是这对代码的健壮性埋下了不少的隐患!


HTTP库

JDK对HTTP支持是比较少的,而且我平时也很少用原生jdk去使用http。虽然你可以使用java.net包中的类建立HTTP连接 ,但使用开源的第三方库(如Apache HttpClient和OkHttp3)并不容易或不能无缝结合。

HTTP库我相信大家一定会用的,一般如果用Spring的话,也可能用上fegin,结合服务发现来用,但是我觉得HTTP库,它指的是外部交互,其实内部交互的模式的话,其实很多,但是对外大部分的话是选HTTP


Excel和PDF库

这个用的确实也多,上传下载啥的都需要实现这个的,比如阿里的  easyexcel 还有 POI

这个是导入导出的,还有一个pdf的工具库    Itext官网 不知道有没有小伙伴用过

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。


网络异常,图片无法展示
|

字节码库

如果你正在编写生成代码或与字节码交互的框架,那么你需要一个字节码库。

它们允许你读取和修改应用程序生成的字节码。Java世界中一些流行的字节码库是javassist和Cglib Nodep。

网络异常,图片无法展示
|


Javassist(Java programming assistant)使Java字节码操作变得非常简单。它是一个用于在Java中编辑字节码的类库。ASM是另一个有用的字节码编辑库。如果你不熟悉字节码,我建议你查看Introduction to Java Programmers以了解有关它的更多信息。


日期和时间库

在Java 8之前,JDK的数据和时间库有很多缺陷,因为它们不是线程安全的不可变的,并且容易出错。许多Java开发人员依靠JodaTime来实现他们的日期和时间要求。

从JDK 8开始,没有理由使用Joda,因为你在JDK 8的新日期和时间API中获得了所有功能,但如果你使用的是较旧的Java版本,那么JodaTime是一个值得学习的库。


Email API

javax.mail和Apache Commons Email都提供了一个用于从Java发送电子邮件的API 。它建立在JavaMail API的基础之上,旨在简化它。

网络异常,图片无法展示
|


HTML解析库

JSONXML类似,HMTL是我们许多人必须处理的另一种常见格式。值得庆幸的是,我们有JSoup,它极大地简化了在Java应用程序中使用HTML的过程。

你不仅可以使用JSoup解析HTML,还可以创建HTML文档

网络异常,图片无法展示
|


它提供了一个非常方便的API,用于提取和操作数据,使用DOM,CSS和类似jquery的方法。JSoup实现了WHATWG HTML5规范,并将HTML解析到同一个DOM,就像现代浏览器一样。


二维码处理库ZXing

ZXing,一个支持在图像中解码和生成条形码(如二维码、PDF 417、EAN、UPC、Aztec、Data Matrix、Codabar)的库。ZXing(“zebra crossing”)是一个开源的、多格式的、用Java实现的一维/二维条码图像处理库,具有到其他语言的端口。

目前的认知告诉我们,二维码是以正方形的形式存在,以类似于二进制的方式存储数据。

在Zxing中,使用BitMatrix来描述一个二维码,在其内部存储一个看似boolean值的矩阵数组。这个类很好的抽象了二维码。 ]


P6spy数据库性能分析

通过P6Spy可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。

p6spy我的理解就是:p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫持到需要执行的sql或者hql之类的语句之后,他自己去调用一个realDatasource,再去操作数据库,只要劫持到那些sql之后,能干的事情就很多了。


MDC 日志染色

  MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能,也可以说是一种轻量级的日志跟踪工具。

  既然我们知道MDC可以让我们快速的捞到可用的日志信息,那具体怎么捞呢?我们先来看这样的一个场景:很多时候,我们一个程序调用链可能会很复杂,并且在调用链的各个环节中,会对一些关键的操作做日志埋点,比如说入参出参、复杂计算后的结果等等信息,但在线上环境是很多用户使用我们功能的,比如说A程序,每个用户都在使用了A程序后,打印了A程序方法调用链内的所以日志,那我怎么就知道这一堆相同日志中,哪些是同一次请求所打印的呢?可能大家会说:可以看它的线程名啊,HTTP在同一请求中会用同一个线程。一定程度上看线程是可以的,但我们也知道,web服务器不可能无限创建线程的,它内部有个线程池,用于HTTP线程的创建、回收等管理,如果该程序使用频率是很高,那完全有可能短时间内的几次请求用的都是同一个线程,这样的话就解决不了上述所说的:“把一次请求中调用链内的所以日志找出来”的需求了。


代码的逆向工程 MybatisPlus 的一个功能

在使用mybatis时需要程序员自己编写sql语句,针对单表的sql语句量是很大的,mybatis官方提供了一种根据数据库表生成mybatis执行代码的工具,这个工具就是一个逆向工程。

逆向工程:针对数据库单表—->生成代码(mapper.xml、mapper.java、pojo。。)

目前这种工具很多,也可以自己去开发一个,crud不用自己写还是很香的。

网络异常,图片无法展示
|


结束


嗯!其实小六六这边就是给大家分享一些常用的工具类,让大家知道有这个东西,等到了真正要去用的时候,大家再去细细学习下啊!或者是有空的时候去学习下,也是非常不错的!今天就到这了,我是小六六,三天打鱼,两天晒网!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
62 9
|
4月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
148 4
|
4月前
|
Java 程序员
Java数据类型:为什么程序员都爱它?
Java数据类型:为什么程序员都爱它?
55 1
|
28天前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
61 6
|
1月前
|
SQL 存储 Java
面向 Java 程序员的 SQLite 替代品
SQLite 是轻量级数据库,适用于小微型应用,但其对外部数据源支持较弱、无存储过程等问题影响了开发效率。esProc SPL 是一个纯 Java 开发的免费开源工具,支持标准 JDBC 接口,提供丰富的数据源访问、强大的流程控制和高效的数据处理能力,尤其适合 Java 和安卓开发。SPL 代码简洁易懂,支持热切换,可大幅提高开发效率。
|
1月前
|
Java API Apache
|
1月前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
2月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
24 5
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
148 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
Java 大数据 程序员
我的程序员之路:自学Java篇
我的程序员之路:自学Java篇