若是你去參加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