优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edition之后,Joshua Bloch提出了建议,其中建议Joshua Bloch如何使用现有的API进行开发,而不是为常见的东西编写新的代码。
该建议对我来说很有意义,因为第二方库可以进行测试。在本文中,我将分享Java开发人员应该熟悉的一些最有用和最基本的库和API。但是,我没有包括框架,例如Spring和Hibernate,因为它们是众所周知的并且具有特定功能。
通常,我会提供用于日常项目的有用库,包括Log4j等日志记录库,Jackson等JSON解析库以及JUnit和Mockito等单元测试API。如果需要在项目中使用它们,则可以在项目的类路径中包含这些库的JAR以开始使用它们,也可以使用Maven进行依赖性管理。
当您使用Maven进行依赖管理时,它将自动下载这些库,包括它们依赖的库,称为传递依赖。
例如,如果您下载Spring框架,它还将下载Spring所依赖的所有其他JAR,例如Log4j。
您可能没有意识到,但是拥有正确版本的依赖JAR令人头疼。如果您使用的JAR版本错误,则将收到 ClassNotFoundException, NoClassDefFoundError或 UnsupportedClassVersionError。
这是我收集的一些有用的第三方库,Java开发人员可以在他们的应用程序中使用它们来完成许多有用的任务。为了使用这些库,Java开发人员应该对此很熟悉,这是本文的重点。如果您有想法,可以研究该库并加以使用。
日志记录库很常见,因为在每个项目中都需要它们。对于服务器端应用程序而言,它们是最重要的事情,因为日志仅放置在您可以看到应用程序运行状况的位置。即使JDK附带了自己的日志记录库,也可以使用更好的替代方法,例如Log4j,SLF4j和LogBack。
在当今的Web服务和IoT世界中,JSON已成为将信息从客户端传输到服务器的首选协议。他们已经将XML替换为以平台无关的方式传输信息的最优选方式。
不幸的是,JDK没有JSON库。但是,有很多不错的第三方库,例如Jackson和Gson,它们都可以让您解析和创建JSON消息。
Java Web开发人员应该至少熟悉这些库之一。如果您想了解有关Jackson和JSON的更多信息,建议您通过Udemy 的Java API课程学习JSON。
单元测试是将普通开发人员与优秀开发人员区分开的最重要的事情。经常为程序员提供不编写单元测试的借口,但是避免单元测试的最常见借口是缺乏流行的单元测试库(包括JUnit,Mockito和PowerMock)的经验和知识。
Java开发人员可以使用几个很好的通用第三方库,例如Apache Commons和Google Guava。我总是将这些库包含在我的项目中,因为它们简化了许多任务。
正如约书亚·布洛赫(Joshua Bloch)在“ 有效Java”中正确说的那样,重新发明轮子没有意义。我们应该宁愿使用久经考验的库,也不要时不时编写我们自己的例程。
我不喜欢JDK的一件事是他们缺乏对HTTP的支持。尽管您可以使用java.net包中的类进行HTTP连接 ,但是使用开源的第三方库(如Apache HttpClient和HttpCore)并不是那么容易或无缝。
尽管JDK 9带来了对HTTP 2.0的支持以及对HTTP的更好的支持,但我强烈建议所有Java开发人员熟悉流行的HTTP客户端库,包括HttpClient和HttpCore。
有许多XML解析库,包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces系列中的下一代高性能,完全兼容的XML解析器。Xerces的这个新版本引入了Xerces本机接口(XNI),这是一个用于构建解析器组件和配置的完整框架,该框架非常模块化且易于编程。
信不信由你–所有现实世界中的应用程序都必须以某种形式与Microsoft Office进行交互。许多应用程序都需要提供在Excel中导出数据的功能,如果必须从Java应用程序中导出数据,则需要Apache POI API。
这是一个非常丰富的库,可让您 从Java程序读取和写入XLS文件。您可以看到该链接,以获取在核心Java应用程序中读取Excel文件的工作示例。
如果要编写一个框架或库来生成代码或与字节码进行交互,则需要一个字节码库。
它们使您可以读取和修改应用程序生成的字节码。Java世界中一些流行的字节码库是javassist和Cglib Nodep。
如果要通过Java应用程序与数据库进行交互,但不使用数据库连接池库,那么您将丢失某些内容。
由于在运行时创建数据库连接会花费时间,并使请求处理变慢,因此始终建议使用数据库连接库。最受欢迎的是Commons Pool和DBCP。
在Web应用程序中,它的Web服务器通常提供这些功能,但是在核心Java应用程序中,您需要将这些连接池库包含到类路径中才能使用数据库连接池。
与日志记录和数据库连接类似,消息传递也是许多实际Java应用程序的共同特征。
Java提供了JMS或Java Messaging Service,它不是JDK的一部分。对于此组件,您需要包括一个单独的 jms.jar。
同样,如果您使用的是Tibco RV之类的第三方消息传递协议,则需要tibrv.jar 在应用程序类路径中使用第三方JAR — 。
与Microsoft Excel相似,PDF库是另一种普遍存在的格式。如果需要在应用程序中支持PDF功能,例如 导出PDF文件中的数据,则可以使用iText和Apache FOP库。
在Java 8之前,JDK的数据和时间库存在许多缺陷,因为它们不是线程安全的,不可变的,并且不容易出错。许多Java开发人员都依靠JodaTime来实现其日期和时间要求。
从JDK 8开始,没有理由使用Joda,因为您可以在JDK 8的新日期和时间API中获得所有功能,但是如果您使用的是较旧的Java版本,那么JodaTime是一个值得学习的库。
尽管JDK具有丰富的集合库,但仍有一些第三方库提供了更多选项,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。
Trove库特别有用,因为它为Java提供了高速的常规和原始集合。
javax.mail和Apache Commons Email都提供了用于从Java发送电子邮件的API 。它建立在旨在简化的JavaMail API之上。
与JSON和XML相似,HMTL是我们许多人必须处理的另一种常见格式。值得庆幸的是,我们拥有JSoup,它大大简化了Java应用程序中HTML的使用。
您可以使用JSoup不仅解析HTML,还可以创建HTML文档
它提供了使用DOM,CSS和类似jquery 的最好方法来提取和处理数据的非常方便的API 。JSoup实现WHATWG HTML5规范并将HTML解析为相同的DOM,就像现代浏览器一样。
Apache Commons Codec软件包包含用于各种格式(例如Base64和Hexadecimal)的简单编码器和解码器。
除了这些广泛使用的编码器和解码器之外,编解码器包还维护了语音编码实用程序的集合。
我真的很喜欢H2这样的内存数据库,您可以将其嵌入Java应用程序中。它们非常适合测试SQL脚本和运行需要数据库的单元测试。但是,H2不是唯一的数据库,您也可以选择Apache Derby和HSQL。
有一些不错的JDBC扩展库,可以使调试更容易,例如P6spy。
这是一个库,可在不更改应用程序代码的情况下无缝地拦截和记录数据库数据。您可以使用它们来记录SQL查询及其时间。
例如,如果您在代码中使用PreparedStatment和CallableStatement,则这些库可以记录带有参数的确切调用以及执行所需的时间。
Google协议缓冲区是一种以有效但可扩展的格式对结构化数据进行编码的方法。它是Java序列化的一种更丰富,更好的选择。我强烈建议经验丰富的Java开发人员学习Google Protobuf。您可以查看本文,以了解有关Google协议缓冲区的更多信息 。
一些有用的网络库是Netty和Apache MINA。如果您在编写需要执行低级网络任务的应用程序,请考虑使用这些库。如果您想了解有关Java中网络编程的更多信息,请查看 Java网络编程-TCP / IP套接字编程。
到此为止,每个Java开发人员都应该使用一些有用的库。Java领域非常广泛,您会发现大量用于执行不同操作的库。
如果您想用Java做任何事情,您将找到一个有关如何做到这一点的库。与往常一样,Google是您找到有用的Java库的最佳朋友,但是您也可以查看Maven中央存储库,以找到一些适合您手头任务的有用库。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。