若是你去参加Java培训,这十个开源库是老师必定会告诉你的!如今大把干货一次全给你!html
Guicejava
Guice(音同“juice”)是谷歌开发的一个轻量级的依赖注入框架,支持 java 6 及以上版本。git
OkHttpgithub
HTTP 是现代应用程序实现互联的机制。数据和媒体的交互都基于此。高效的 http 机制能提高你的下载速度和节约带宽。api
OkHttp 做为一个HTTP客户端,默认:浏览器
HTTP/2 服务默认发往同一台主机的全部请求共用一个套接字。缓存
链接池减小请求的延迟(如 HTTP/2 不可用)。安全
gzip 压缩下载大小可见。服务器
经过响应缓存彻底避免了网络的重复请求。网络
Retrofit
来自 Square 公司的 HTTP 客户端,类型案例,可用于 Android 和 Java。Retrofit 会按照 HTTP API 生成 Java 接口。
Retrofit 类实现 GitHubService 接口。
来自 GitHubService 的每一个 Call 都会向远端 Web 服务器发送一个同步或异步的 HTTP 请求。
JDeferred
Java 的 Deferred/Promise 库,与 JQuery 的 Deferred/Promise 类似
Deferred 和 Promise 对象 Promise 回调:.then(…), .done(…), .fail(…), .progress(…), .always(…) 同时处理多个 Promise - .when(p1, p2, p3, …).then(…) Callable 和 Runnable - wrappers.when(new Runnable() {…}) 使用执行服务(ExecutorService) Java Generics 支持: Deferred
RxJava
RxJava – JVM 的 Reactive Extensions (响应式扩展) – 一个用于 Java VM 的库,它经过可观测序列构成异步及基于事件的程序。
它扩展了观察者模式以支持数据/事件流,并添加了操做符,使你能以申明的方式组合处理序列,对一些事情进行抽象,好比低级线程、同步、线程安全和并发数据结构。
RxJava 常见的应用是在后台线程运行一些计算或网络请求,并在 UI 线程显示结果(或错误):
MBassador
MBassador 是一个轻量级、高性能的事件总线,它实现了发布/订阅模式。它的设计目的是易用、功能丰富和可扩展,同时保持资源的高效利用和良好性能。
MBassador 高性能的核心在于一个专用的数据结构,这个数据结构提供了非阻塞读功能以及在写时最小化锁竞争,所以它将并行读/写访问形成的性能损耗降到最低。
注解驱动 分发的全部东西都会考虑类型层级 同步和异步的消息分发 可配置的引用类型 消息过滤 封装消息 多级优先层次处理 自定义错误处理
10. // somewhere else in your codeMBassador bus = new MBassador();
11. Object listener = new SimpleFileListener();
12. bus.subscribe (listener);
13. bus.post(new File("/tmp/smallfile.csv")).now();
14. bus.post(new File("/tmp/bigfile.csv")).asynchronously();
Project Lombok
经过注解来减小 Java 中的重复性代码,好比 getter 和 setter、非空检查、生成 Builder 等。
val - 终级解决方案!简化 final 局部变量定义。 @NonNull - 或者:了解我是怎样中止担忧并爱上 NullPointerException 的。 @Cleanup - 怎么资源管理:方便而安全地调用 close() 方法。 @Getter / @Setter - 再也不须要写像 public int getFoo() {return foo;} 这样的代码。 @ToString - 不用启动调试器就能观察字段值:让 Lombok 为你生成 toString! @EqualsAndHashCode - 让等值比较变得容易:在项目中由字段实现 hashCode 和 equals。 @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor - 定制构造器:生成无参构造函数,对每一个 final/非空 字段产生构造器,对每一个字段产生构造器。 @Data - 它合并全部注解:至关于对全部字段应用 @ToString、@EqualsAndHashCode、@Getter,并对全部非 final 字段应用 @Setter,以及应用 @RequiredArgsConstructor! @Value - 简单创意不可变类。 @Builder - … 一切都很简单:简单直接地建立对象的 API! @SneakyThrows - 大胆的抛出之前不能轻易抛出的异常! @synchronized - 正确的同步:不要暴露你的锁。 @Getter(lazy=true) 懒加载是种美德! @Log - 舰长日志,星历 24435.7: “这是什么行?”
Simple Logging Facade for Java
Simple Logging Facade for Java(SLF4J)是对各类日志框架(好比 java.util.logging、logback、log4j 等)的简单门面或者抽象,它让用户能够在开发时使用喜欢的日志框架。
简单地说,库和其它嵌入式组件考虑使用 SLF4J 来记录日志,由于它们不能把本身选用的日志框架强加给用户。另外一方面,独立的应用程序就没必要在乎是否使用 SLF4J。独立的应用程序能够直接使用本身选用的日志框架。在使用 logback 的时候会有一个争议,由于它是使用 SLF4J 来提供日志 API 的。
JUnitParams
参数化测试
与标准 JUnit Parametrised 运行器的主要区别:
更明确 - 参数是测试方法的参数,而不是类中定义的字段 更少代码 - 不须要经过构造器来设置参数 能够在一个类里混合参数化或非参数化的方法 参数能够由 CSV 文本提供,也能够由专门的参数提供类提供 参数提供类能够有任意多个参数提供方法,因此你能够对不一样的状况分组 能够由测试方法提供参数(而不是其它类或静态方法) 能够在 IDE 中看到实际的参数值(JUnit 的 Parametrised 中只有连续编号的参数)
Mockito
Java 中不错的 mock 框架
10. System.out.println(mockedList.get(0));
12. //following throws runtime exception
13. System.out.println(mockedList.get(1));
15. //following prints "null" because get(999) was not stubbed
16. System.out.println(mockedList.get(999));
18. //Although it is possible to verify a stubbed invocation, usually it's just redundant
19. //If your code cares what get(0) returns, then something else breaks (often even before verify() gets executed).
20. //If your code doesn't care what get(0) returns, then it should not be stubbed. Not convinced? See here.
21. verify(mockedList).get(0);
Jukito
结合了 JUnit、Guice 和 Mockito 的力量,听起来颇有技术含量。 大大下降了自动 mock 的古板,使阅读测试变得容易 在测试对象的 API 变化时更有弹性 经过 @Inject 注解的字段能够自动注入 更容易将对象绑在一块儿,所以能够将单元测试扩展到部分集成测试
10. IncomingEmails incomingEmails,
11. EmailFactory factory) {
12. dummyEmail = factory.createDummy();
13. when(incomingEmails.count()).thenReturn(1);
14. when(incomingEmails.get(0)).thenReturn(dummyEmail);
15. }
17. @Test
18. public void shouldFetchEmailWhenStarting(
19. EmailView emailView) {
20. // WHEN
21. emailSystem.start();
23. // THEN
24. verify(emailView).addEmail(dummyEmail);
25. }
26. }
Awaitility
Awaitility 是一个小型的 DSL(领域专用语言),用于将异步操做同步化。
测试异步系统是件难事,不只须要处理线程、超时和并发问题,测试代码的意图还可能被这些细节所掩盖。Awaitility 是一个 DSL,它能以一个简洁易读的方式表达异步系统要作的事情。
Spock
用于企业的测试和规范框架。
10. "Kirk" | 4
11. "Scotty" | 6
12. }
13. }
WireMock
模拟 HTTP 服务的工具 HTTP 响应头,匹配 URL、标题和正文模式 验证请求 在单元测试中运行、独立运行或做为 WAR 应用运行 经过 Java API、JSON 文件或者经过 HTTP 获取的 JSON 来进行配置 录制/回放存根 故障注入 针对每一个请求的条件代理 浏览器代码用于注入请求或更换请求 有状态的行为 可配置响应延迟
10. }
11. }
原文:Java libraries you can't miss in 2017
译者:边城, Tocy, butta