Java下好用的开源库推荐
作者:Jack47
转载请保留作者和原文出处
欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源。
2017-4-6 更新: Google搜索 awesome java, 你会看到众多程序员参与维护的优秀Java编程库列表。学好英语,用Google搜索,否则我们就只能在中文的局域网里翻阅别人写的二手资料了。
本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定期更新。
使用这些开源的类库,帮助非常大,能够节约你的宝贵时间,减少你出错的可能,让你把时间都集中在处理自己独特的业务逻辑上。同时可以多看看这些优秀的开源库,向他们学习,能够帮助你设计更好的API,让你的代码更易读,更整洁,更简单,因为这些API自身就是很好的例子。
Guava##
Guava[ˈgwɑːvə]。它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(Concurrency),常用注解(Common annotations),String操作,I/O操作方面的众多非常实用的函数。Guava需要JDK1.6及以上版本。
Guava库是按照Joshua Bloch的 <<Effective Java: 2nd Edition>>来写的,不可变性(不可变的集合,CharMatcher,Joiner, Splitter等),构造者模式(ImmutableList.builder(), Joiner, Ordering等),范型等随处可见,使用工厂而不是构造函数(Maps.newHashMap()),钟情于组合而不是继承(ForwardXXX这类集合)。
我专门写过 Google Java编程库Guava介绍
Joda Time
Joda-Time:
Java 8之前提供的标准的日期(Date)和时间(Time)类非常烂。现在Java下Joda Time已经成为了标准,进入了 Java 8中的java.time。Joda-Time的API相当简单,支持很多日历系统,对时区(time zone),时间间隔(duration),格式(format)和解析(parsing)的支持也相当赞。
Apache Commons
Apache Commons项目目的是从各个方面提供可复用的Java编程组件。里面包含了很多很多组件,我用到的主要有:
Codec
提供了常用编码和解码的函数实现,例如Base64, Hex
CLI
提供了一个非常方便的命令行参数解析器,几行API调用就可以搞定命令行参数解析
Metrics
Metrics以前叫Coda Hale Metrics。如果你需要关注程序内部的一些性能或业务指标,需要统计数据,Coda Hale Metrics都可以帮你搞定,包括JDBI,Jersey,Jetty,Log4j,JVM内部性能指标。如果需要定制自己的指标,你所需要做的就是两件事情:
- 注册你的监控数据的类型
- 加入监控的埋点
Metrics支持5种数据类型:Meter(事件发生的频率,例如QPS), Gauge(值的大小), Counters(计数器), Histogram(计算值的统计分布), Timer(耗时)。其中 Meter支持 1min,5min,15min内平均值,由于是通过采样来统计的,所以性能开销很小。Gauge支持最大值,最小值,平均值和标准差,同时也支持5种分点数据:75,90,98,99,99.9分点。
Metrics支持JMX汇报,HTTP汇报(自带了一个简单的Servlet,可以提供JSON表示注册的所有监控数据),也可以使用终端,文件来输出CSV格式的数据,也可以支持Ganglia和Graphite所需的格式类型。
Kafka消息队列,流式处理数据的Storm,都在用Metrics作为监控数据的收集系统。
SLF4J

SLF4J全称是Simple Logging Facade for Java,即简单日志门面。它对众多的日志框架做了抽象,提供统一的日志API,用户可以通过classpath指定SLF4J最终使用的日志框架,这样就可以在运行时才决定使用哪个日志后端,例如Logback,log4j等。这样做的好处是让应用程序和特定的日志框架之间解耦合。当你需要和第三方代码库或者已经决定了日志框架选型的项目做集成时,这个特性会非常方便。
SLF4J使用手册只有区区两页。
PowerMock

单测Mock工具库PowerMock与同类的工具Mockito, EasyMock, jMock都很相似,都是为了简化单元测试过程中测试上下文的搭建而开发的工具。可以极大地简化单元测试的书写过程,可以实现对静态函数、构造函数、私有函数、Final函数一季系统函数的模拟。这样可以大大提高单测的效率及单测代码的可读性。
PowerMock使用定制化的类加载器(class loader)和字节码(bytecode)操作技术,而不是用反射的机制。
Byte Buddy

Byte Buddy是一个用来在Java应用程序运行过程中产生Java class的代码生成库。Byte Buddy的目的是通过领域专用语言(DSL)来把生成字节码的过程隐藏起来。这样使用Byte Buddy时就不需要知道底层的Java字节码和类文件的格式了。
如果您看了本篇博客,觉得对您有所收获,请点击右下角的“推荐”,让更多人看到!
Java下好用的开源库推荐的更多相关文章
- 【开源库推荐】#3 Android EventBus的使用
原文地址:[开源库推荐]#3 Android EventBus的使用 | Stars-One的杂货小窝 EventBus的Github Event bus for Android and Java t ...
- 27个提升效率的iOS开源库推荐
DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core Data助手) C ...
- 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!
作者:编辑部的故事 < 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! > 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! Tutoria ...
- 快快快!27个提升效率的iOS开源库推荐
文章来源:http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1 我热爱开源,更喜爱那些花费宝贵的业 ...
- 快快快!27个提升效率的iOS开源库推荐(转)
CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用.开发工具.移动游戏及引擎.智能硬件.物联网等方方面面.如果您想投稿.参与内容翻译工作,或寻求近匠报道,请发送 ...
- linux下安装libcurl及开源库的一般安装步骤
前言 总有人说:要多看源代码!那么源代码去哪找呢?找到了又该怎么安装呢?本票博客不介绍如何使用和学习,只要讲获取和安装,以后会将curl和libevent的使用和学习. 一.开源库常用安装步骤 1.开 ...
- 各种实用的 PHP 开源库推荐【转】
转自: https://my.oschina.net/editorial-story/blog/882780 PHP 是一种通用开源脚本语言.语法吸收了 C 语言.Java 和 Perl 的特点,利于 ...
- ios开发--27个提升效率的iOS开源库推荐
超长慎入列表: DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core D ...
- GitHub上那些值得一试的JAVA开源库--转
原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...
随机推荐
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- 以bank account 数据为例,认识elasticsearch query 和 filter
Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...
- WPF 微信 MVVM 【续】发送部分QQ表情
今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- 【HTML】Html页面跳转的5种方式
目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...
- webix前端架构的项目应用
webix框架兼容javascript.HTML.CSS,应用比较灵活,应用框架时,配合后台webAPI,整个web项目里面,App文件夹保存前台的多语言文件,图片文件,webix原代码js.css, ...
- 易用BPM时代,软件开发者缘何选择H3?
近年来,企业级软件开发市场暗流汹涌,呈现出多种态势.软件开发团队规模趋于小型化,工作方式趋于快捷化,超过半数的软件开发者在工作中会选择使用易用的软件开发工具.随着流程管理越来越受到企业的重视,流程开发 ...
- RMS去除在线认证
在微软 OS 平台创建打开 RMS 文档如何避免时延 相信我们在企业内部的环境中已经部署了微软最新的OS平台,Windows 7和Windows 2008 R2,在这些OS平台上使用IRM功能时,您有 ...