一个有经历的Java开发人员特征之一便是长于运用已有的轮子来造车。《EffecTIve Java》的作者Joshua Bloch从前说过:“主张运用现有的API来开发,而不是重复造轮子”。在本文中,我将共享一些Java开发人员应该了解的最有用的和必要的库和API。趁便说一句,这儿不包含结构,如Spring和Hibernate由于他们十分有名,都有特定的功用。
本文总结了日志、JSON解析、单测、XML解析、字节码处理、数据库衔接池、调集类、邮件、加密、嵌入式SQL数据库、JDBC故障诊断以及序列化等20个方面的常用类库。都是你日常开发常常可能要用到的,现在不用没关系,可是你要知道有这么一篇文章能够供你参阅。
不知道不可怕,可怕的是你不知道你不知道。
一、日志相关类库
日志库是很常见的,由于你在每一个项目中都需求他们。打印日志是服务器端运用中最重要的工作,由于日志是你了解你的程序发生了什么的仅有途径。尽管JDK趁便自己的日志库,可是仍是有许多更好的挑选可用,例如Log4j、SLF4j和LogBack。
Java开发人员应该了解日志记载的利害,而且了解为什么SLF4J要比Log4J要好。
二、JSON解析库
在当今世界的web服务和物联网中(IoT),JSON现已替代了XML,成为从客户端到服务器传送信息的首选协议。有一个好音讯和一个坏音讯。坏音讯是JDK没有供给JSON库。好音讯是有许多优异的第三方库能够用来解析和创立JSON音讯,如Jackson 和 Gson
一个Java web开发人员应该了解Jackson 和 Gson这两种中的至少一种库。
三、单元测试库
单元测试技能的运用,是区别一个一般的开发者和洽的开发者的重要目标。程序员常常有各种托言不写单元测试,但最常见的托言便是缺少经历和常识。常见的单测结构有JUnit,Mockito和PowerMock。
四、通用类库
有几个很好的第三方通用库可供Java开发人员运用,例如Apache Commons和Google Guava。我会常常在我的代码中运用这些通用类库,由于这些类库都是通过许多开发者实践过的,无论是有用性仍是在功用等方面都是最佳的。
五、Http 库
我不是很喜爱JDK的一个重要原因就包含他们缺少对HTTP的支撑。尽管能够运用java.net包类,可是这和直接运用像Apache HttpClient和HttpCore等开源类库比起来费事太多了。
尽管JDK 9将开端HTTP 2.0,也对HTTP的支撑做了优化,可是我仍是强烈主张一切的Java开发人员了解盛行的HTTP处理类库,例如HttpClient和HttpCore HTTP等库。
六、XML解析库
市道上有许多XML解析的类库,如Xerces, JAXB, JAXP, Dom4j, Xstream等。Xerces2是下一代高功用,完全兼容的XML解析东西。Xerces2界说了 Xerces NaTIve Interface (XNI)规范,并供给了一个完好、兼容规范的 XNI 规范完结。该解析器是完全从头规划和完结的,更简略以及模块化。
七、Excel读写库
许多运用程序需求供给把数据导出到Excel的功用,假如你要做相同的Java运用程序,那么你需求Apache POI API。
这是一个十分丰厚的类库,你能够从Java程序读写XLS文件。
八、字节码库
假如你正在编写一个结构或许类库。有一些受欢迎的字节码库如javassist和Cglib Nodep能够供你挑选,他们能够让你阅览和修正运用程序生成的字节码。
Javassist使得JAVA字节码操作十分简略。它是一个为修正Java字节码而生的类库。ASM是另一个有用的字节码修正库。
九、数据库衔接池库
假如你的Java运用程序与数据库交互不是运用数据库衔接池库的话,那么你就大错特错了。由于在运行时创立数据库衔接十分耗时而且会拖慢你的程序。所以墙裂主张运用,有些好用的衔接池可供挑选,如Commons Pool 和 DBCP。
在web运用程序中,web服务器一般供给了这些功用。可是在java项目中需求把数据库衔接池的类库导入到运用中。
十、音讯传递库
像日志和数据库衔接池相同,音讯传递也是许多实践的Java项目中必备的。Java供给了JMS Java音讯服务,但这不是JDK的一部分,你需求独自的引进jms.jar。相似地,假如您预备运用第三方音讯传递协议,TIbco RV是个不错的挑选。
十一、PDF处理库
除了Excel和Word,PDF也是一种常用的文件格局。假如你的运用程序要支撑PDF格局的文件处理,你能够运用iText和Apache FOP类库。两者都供给了十分有用的PDF处理功用。
十二、日期和时刻库
在Java之前,JDK的日期和时刻库一向被人们所诟病,比方其非线程安全的、不可变的、简单犯错等。许多开发人员会挑选更好用的JodaTIme类库。
可是在Java8推出之后,咱们就能够完全抛弃JodaTime了,由于Java 8供给了其一切功用。可是,假如你的代码运行在一个低版别的JDK中,那么JodaTime仍是值得运用的。
十三、调集类库
尽管JDK有丰厚的调集类,但仍是有许多第三方类库能够供给更多更好的功用。如Apache Commons Collections、 Goldman Sachs collections、 Google Collections和Trove。Trove特别有用,由于它供给一切规范Collections 类的更快的版别以及能够直接在原语(primitive)(例如包含int 键或值的Map 等)上操作的Collections 类的功用。
FastUtil是另一个相似的API,它承继了Java Collection Framework,供给了数种特定类型的容器,包含映射map、调集set、列表list、优先级行列(prority queue),完结了java.util包的规范接口(还供给了规范类所没有的双向迭代器),还供给了很大的(64位)的array、set、list,以及快速、有用的二进制或文本文件的I/O操作类。
十四、邮件API
javax.mail 和 Apache Commons Email 供给了发送邮件的api。它们建立在JavaMail API的基础上,供给简化的用法。
十五、HTML解析库
和XML与JSON相似,HTML是别的一种咱们可能要打交道的传输格局。值得幸亏的是,咱们有jsoup能够大大简化Java运用程序运用HTML。你不只能够运用JSoup解析HTML还能够创立HTML文档。
十六、加密库
Apache Commons宗族中的Commons Codec就供给了一些公共的编解码完结,比方Base64, Hex, MD5,Phonetic and URLs等等。
十七、嵌入式SQL数据库库
我真的是十分喜爱像H2这种内存数据库,他能够嵌入到你的Java运用中。在你跑单测的时分假如你需求一个数据库,用来验证你的SQL的话,他是个很好的挑选。趁便说一句,H2不是仅有嵌入式DB,你还有Apache Derby和HSQL可供挑选。
十八、JDBC故障诊断库
有不错的JDBC扩展库的存在使得调试变得很简单,例如P6spy,这是一个针对数据库拜访操作的动态监测结构,它使得数据库数据可无缝截取和操作,而不用对现有运用程序的代码作任何修正。P6Spy 分发包包含P6Log,它是一个可记载任何 Java 运用程序的一切JDBC业务的运用程序。其装备完结运用时,能够进行数据拜访功用的监测。
十九、序列化库
Google Protocol Buffer 是一种简便高效的结构化数据存储格局,能够用于结构化数据串行化,或许说序列化。它很适合做数据存储或 RPC 数据交换格局。可用于通讯协议、数据存储等范畴的言语无关、渠道无关、可扩展的序列化结构数据格局。现在供给了 C++、Java、Python 三种言语的 API。
二十、网络库
一些有用的网络库主要有Netty的和Apache MINA。假如您正在编写一个运用程序,你需求做的底层网络使命,能够考虑运用这些库。
这都是每位Java开发人员应该了解的,而且十分有用的库。Java生态系统十分巨大的,你会发现有许多不同的类库能够做不同的工作。每个你想到的东西,都可能有一个库能够做到。