一个有经验的 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 生态系统非常庞大的, 你会发现有很多不同的类库可以做不同的事情. 每个你想到的东西, 都可能有一个库可以做到.
要相信, 你遇到的问题, 肯定不止你一个遇到过.
要相信, 也许有很多人比你更勤奋.
要相信, 你用或不用, 轮子就在那里.
要相信, 使用这些类库, 你和你的代码都会变得更好.
如果您在学习编程的过程中遇到难题, 欢迎关注[筑梦前端] , 也可以后台留言与大家一起交流解决!
来源: http://www.jianshu.com/p/f2b12dc4ce42