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 ...
随机推荐
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- tLinux 2.2下安装Mono 4.8
Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...
- .net windows Kafka 安装与使用入门(入门笔记)
完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS 在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...
- unity 3d 解析 json
官网案例传送门 我这里不过是借花献佛,案例官网就有. using UnityEngine; using System.Collections; public class json : MonoBeha ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- bzoj1901--树状数组套主席树
树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...
- QQ空间动态爬虫
作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...
- 多个ul中第一个li获取定位
如果我们只是获取一个ul中的第一个li的话,那么我们可以这样写: $("ul li:first"); $("ul li").eq(0); $("ul ...
- JavaScript知识结构图
画的一个知识结构图,方便理解.
- 周末聊聊IT人员的人脉观:关于帮妹子找兼职有感
背景: 前几天,有个认识了好几年的网友,现在是大学生,在厦门读大一,说和她同学要一起到广州找兼职,看我有没有介绍. 像我这么积极热心善良的人,就说帮她找找看,结果问了几次,没消息,只好诚实的回复人家, ...