亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

2017你不應該錯過的Java庫包

2019-11-06 06:51:07
字體:
來源:轉載
供稿:網友
下面是2017年你不應該錯過的java庫包清單:

Guice

Guice是一個Java 6以上支持依賴注入框架。由谷歌提供。

# Typical dependency injectionpublic class DatabaseTransactionLogPRovider implements Provider<TransactionLog> {  @Inject Connection connection;  public TransactionLog get() {    return new DatabaseTransactionLog(connection);  }}# FactoryModuleBuilder generates factory using your interfacepublic interface PaymentFactory {   Payment create(Date startDate, Money amount); }

OkHttp

HTTP是現代網絡的通訊方式。決定我們如何交換數據和媒體。 如果有效地執行HTTP通訊會使您的內容加載更快,并且節省帶寬。OkHttp是一個HTTP客戶端,高效是其特點:(1)在HTTP / 2情況下支持對同一主機的所有請求能夠共享同一個socket。(2)通過連接池降低請求延遲(如果HTTP / 2不可用)。(3)透明GZip壓縮下載大小。(4)對響應進行緩存,可以完全避免重復請求的網絡。

OkHttpClient client = new OkHttpClient();String run(String url) throws IOException {  Request request = new Request.Builder()      .url(url)      .build();  Response response = client.newCall(request).execute();  return response.body().string();}

Retrofit

用于Android的類型安全的HTTP客戶端,能夠將HTTP API轉為Java接口。

public interface GitHubService {    @GET("users/{user}/repos")    Call<List<Repo>listRepos(@Path("user") String user);}Retrofit會產生上面GitHubService的實現類:

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build(); GitHubService service = retrofit.create(GitHubService.class);每個對創建的GitHubService類調用將對遠程服務器產生一個同步或異步的Http請求。

Call<List<Repo>> repos = service.listRepos("octocat");

JDeferred

Java的Deferred/Promise庫類似于JQuery:Deferred對象和PromisePromise回調: .then(…), .done(…), .fail(…), .progress(…), .always(…)多個promises - .when(p1, p2, p3, …).then(…)Callable 和 Runnable - wrappers.when(new Runnable() {…})使用Executor ServiceJava范型支持: Deferred<Integer, Exception, Doubledeferred;, deferred.resolve(10);, deferred.reject(new Exception());,deferred.notify(0.80);,Android支持Java 8 Lambda友好

RxJava

RxJava - JVM的反應式擴展Reactive Extension -使用可觀察序列來組合異步和基于事件的程序。它擴展了觀察者模式以支持數據/事件序列,并添加操作符,允許您以聲明方式組合序列,同時抽象出對低級線程,同步,線程安全和并發數據結構等問題的關注。RxJava的一個常見用例是在后臺線程上運行一些計算,比如網絡請求,并在UI線程上顯示結果(或錯誤):

Flowable.fromCallable(() -{     Thread.sleep(1000); //  imitate expensive computation     return "Done"; })   .subscribeOn(Schedulers.io())   .observeOn(Schedulers.single())   .subscribe(System.out::println, Throwable::printStackTrace);  Thread.sleep(2000); // <--- wait for the flow to finish

MBassador

MBassador是一種輕量級,高性能的事件總線,實現發布訂閱模式。它為易于使用而設計,功能豐富且可擴展,同時保持資源效率和高性能。MBassador的高性能核心是一個專門的數據結構,提供非阻塞讀取器,并最大限度地減少寫爭奪的鎖爭用,使并發讀/寫訪問的性能降低最小。注釋驅動遞送一切,尊重類型層次結構同步和異步消息傳遞可配置的引用類型消息過濾包裝消息處理程序優先級自定義錯誤處理可擴展性

// Define your listenerclass SimpleFileListener{    @Handler    public void handle(File msg){      // do something with the file    }}// somewhere else in your codeMBassador bus = new MBassador();Object listener = new SimpleFileListener();bus.subscribe (listener);bus.post(new File("/tmp/smallfile.csv")).now();bus.post(new File("/tmp/bigfile.csv")).asynchronously();

Lombok

使用注釋來減少Java中的重復代碼,例如getters setters,not null檢查,生成Builder等。val - 不會產生麻煩的final局部變量。@NonNull - 或者:我怎么學會停止擔心和喜歡上了NullPointerException。@Cleanup - 自動資源管理:安全地調用您的close()方法,沒有麻煩。@Getter / @Setter - 不要再寫public int getFoo(){return foo;}。@ToString - 無需啟動調試器來查看您的字段:只需讓Lombok為您生成一個toString!@EqualsAndHashCode - 從對象的字段中生成hashCode和equals實現。@NoArgsConstructor,@RequiredArgsConstructor和@AllArgsConstructor - 按順序構造的構造函數:生成不帶參數,每個final /非空字段有一個參數或每個字段有一個參數的構造函數。@Data - 現所有字段上都有@ToString,@EqualsAndHashCode,@Getter的快捷方式,所有非final字段的@Setter和@RequiredArgsConstructor!@Value - 編寫不可變的類非常容易。@Builder - 沒有麻煩的花哨的API對象創建!@SneakyThrows - 大膽地引發檢查異常,在沒有觸發他們之前!@同步 - 同步:不要暴露你的鎖。@Getter(lazy = true)懶惰是一種美德!

SLF4j

Simple Logging Facade for Java (SLF4J)用作各種日志框架(例如java.util.logging,logback,log4j)的簡單封裝管理抽象,允許最終用戶在部署時插入所需的日志框架。簡而言之,嵌入式庫或組件應該考慮SLF4J的作為日志記錄需求,因為該庫不會強加最終用戶選擇哪個日志框架。 另一方面,對于獨立應用程序使用SLF4J并不一定有意義。獨立應用程序可以直接調用他們選擇的日志框架。

JUnitParams

與標準JUnit的主要區別:更明確 - params是在測試方法參數中,而不是類字段更少的代碼 - 你不需要一個構造函數來設置參數您可以在一個類中混合使用非參數方法的參數參數可以作為CSV字符串或參數提供程序類傳遞參數提供程序類可以具有任意多個提供所需方法的參數,以便可以對不同的案例進行分組你可以有一個提供參數的測試方法(不再有外部類或靜態)您可以在IDE中查看實際的參數值(在JUnit的Parametrised中,它只是連續的參數數量):

       @Test       @Parameters({"17, false",                     "22, true" })       public void personIsAdult(int age, boolean valid) throws Exception {         assertThat(new Person(age).isAdult(), is(valid));       }

Mockito

單元測試框架:

//你可以模擬具體的類,而不僅僅是接口 LinkedList mockedList = mock(LinkedList.class); //stubbing when(mockedList.get(0)).thenReturn("first"); when(mockedList.get(1)).thenThrow(new RuntimeException()); //將打印 "first" System.out.println(mockedList.get(0)); //將拋出runtime exception System.out.println(mockedList.get(1)); //將打印 "null" 因為get(999)沒有被stubbed System.out.println(mockedList.get(999)); //Although it is possible to verify a stubbed invocation, usually it's just redundant //If your code cares what get(0) returns, then something else breaks (often even before verify() gets executed). //If your code doesn't care what get(0) returns, then it should not be stubbed. Not convinced? See here. verify(mockedList).get(0);

Jukito

集合 JUnit, Guice, 和 Mockito優點:通過自動化,大大減少了樣板,導致更容易閱讀測試引入對測試對象中的API更改更有彈性的測試用@Inject注釋的字段會自動注入使得將對象連接在一起變得容易,因此您可以將單元測試縮放為部分集成測試

@RunWith(JukitoRunner.class)public class EmailSystemTest {  @Inject EmailSystemImpl emailSystem;  Email dummyEmail;  @Before  public void setupMocks(      IncomingEmails incomingEmails,      EmailFactory factory) {    dummyEmail = factory.createDummy();    when(incomingEmails.count()).thenReturn(1);    when(incomingEmails.get(0)).thenReturn(dummyEmail);  }  @Test  public void shouldFetchEmailWhenStarting(      EmailView emailView) {    // WHEN    emailSystem.start();    // THEN    verify(emailView).addEmail(dummyEmail);  }}

Awaitility

Awaitility是一種用于同步異步操作的小型Java DSL。測試異步系統很困難。 它不僅需要處理線程,超時和并發問題,但測試代碼的意圖可能被所有這些細節模糊。 Awaitility是一種DSL,允許您以簡潔易讀的方式表達異步系統的期望。

@Testpublic void updatesCustomerStatus() throws Exception {    // Publish an asynchronous event:    publishEvent(updateCustomerStatusEvent);    // Awaitility讓你等待異步操作完成    await().atMost(5, SECONDS).until(customerStatusIsUpdated());    ...}

Spock

為企業準備的測試和規范框架。

class HelloSpockSpec extends spock.lang.Specification {  def "length of Spock's and his friends' names"() {    expect:    name.size() == length    where:    name     | length    "Spock"  | 5    "Kirk"   | 4    "Scotty" | 6  }} 

WireMock

模擬HTTP服務的工具:HTTP響應stubbing存根,匹配HTTP的URL、頭部和正文內容請求驗證在單元測試中運行,作為獨立進程或作為WAR應用程序運行可通過流暢的Java API,JSON文件和通過HTTP的JSON進行配置記錄/回放存根故障注入每次請求的條件代理瀏覽器代理請求檢查和替換狀態行為模擬可配置的響應延遲

{    "request": {        "method": "GET",        "url": "/some/thing"    },    "response": {        "status": 200,        "statusMessage": "Everything was just fine!"    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美特级www| 国产精品成人国产乱一区| 琪琪亚洲精品午夜在线| 日韩在线播放视频| 另类少妇人与禽zozz0性伦| 亚洲欧美成人网| 国产美女搞久久| 亚洲综合中文字幕在线| 亚洲精品久久久久中文字幕二区| 中文字幕av一区中文字幕天堂| 福利视频一区二区| 日本免费在线精品| 久久久久日韩精品久久久男男| 国产精品久久久久久影视| 亚洲性线免费观看视频成熟| 精品网站999www| 精品国产拍在线观看| 午夜精品久久久久久久久久久久久| 久久99久久亚洲国产| 亚洲欧洲视频在线| 国产精品自在线| 日韩亚洲一区二区| 视频直播国产精品| 日本一区二区在线播放| 亚洲电影在线看| 国产欧美久久一区二区| 欧美亚洲国产成人精品| 国产精品视频一区国模私拍| 国产精品视频成人| 综合国产在线观看| 国产成人精品在线| 91麻豆国产精品| 国产欧美精品一区二区三区介绍| 国产精欧美一区二区三区| 日韩精品999| 欧美成人免费观看| 欧美成人精品不卡视频在线观看| 成人美女av在线直播| 日韩av网站导航| 日本精品久久久久久久| 亚洲天堂网在线观看| 久久久久五月天| 国产美女搞久久| 日韩av在线免费播放| 国产精品美女免费| 欧美午夜电影在线| 国内精品小视频| 亚洲精品国产综合区久久久久久久| 另类专区欧美制服同性| 亚洲欧美日韩中文视频| 亚洲天堂开心观看| 国产在线视频不卡| 国产精品盗摄久久久| 欧美成人免费全部观看天天性色| 中文字幕日韩电影| 国语对白做受69| www.日韩av.com| 最新的欧美黄色| 久久久伊人日本| 亚洲黄色www| 精品视频在线导航| 隔壁老王国产在线精品| 亚洲japanese制服美女| 91超碰中文字幕久久精品| 一本色道久久88亚洲综合88| 热re99久久精品国产66热| 在线观看亚洲视频| 91探花福利精品国产自产在线| 国产精品美女av| 日本高清不卡的在线| 久久久av网站| 久久男人的天堂| 欧美日韩国产二区| 成人中文字幕在线观看| 亚洲日韩中文字幕| 亚洲国产婷婷香蕉久久久久久| 亚洲大尺度美女在线| 97精品一区二区视频在线观看| 欧美大片va欧美在线播放| 一区二区三区四区视频| 欧美视频在线看| 亚洲欧美国产精品va在线观看| 91久久国产精品91久久性色| 欧美精品免费看| 亚洲成人黄色在线观看| 欧洲亚洲在线视频| 欧美极品少妇xxxxⅹ免费视频| 欧美性在线视频| 国产成人黄色av| 亚洲自拍偷拍福利| 日韩精品视频免费在线观看| 亚洲一区二区久久久久久久| 成人国产精品免费视频| 久热在线中文字幕色999舞| 日韩av手机在线看| 欧美日韩在线观看视频小说| 成人综合国产精品| 日韩免费在线免费观看| 在线a欧美视频| 亚洲第一在线视频| 欧美丰满片xxx777| 亚洲欧美日韩高清| 国内成人精品一区| 欧洲日本亚洲国产区| 自拍偷拍亚洲区| 亚洲一二在线观看| 日本中文字幕成人| 亚洲影院色在线观看免费| 日本精品在线视频| 中日韩午夜理伦电影免费| 国产精品一区二区三区久久| 国内精品久久久久久中文字幕| 欧美日韩成人在线播放| 精品国产一区二区三区久久狼5月| 最近2019好看的中文字幕免费| 欧美日韩免费区域视频在线观看| 亚洲日本aⅴ片在线观看香蕉| 一区二区三区 在线观看视| 日韩美女在线观看一区| 日韩av中文字幕在线播放| 日韩中文字幕久久| 国产成人福利视频| 精品成人av一区| 91av视频在线| 另类少妇人与禽zozz0性伦| 日韩在线中文视频| 国产成+人+综合+亚洲欧洲| 久久久日本电影| 日韩欧美中文字幕在线观看| 久久99青青精品免费观看| 国产精品99久久久久久www| 成人欧美一区二区三区黑人| 91精品国产综合久久香蕉的用户体验| 久久久久久久久久久久久久久久久久av| 91欧美激情另类亚洲| 亚洲欧美综合区自拍另类| 久久久亚洲影院| 正在播放亚洲1区| 日韩精品在线观| 日韩av理论片| 97超级碰碰人国产在线观看| 亚洲欧美福利视频| 亚洲偷欧美偷国内偷| 久久久久国产精品www| 久久免费精品日本久久中文字幕| 久久国产加勒比精品无码| 成人疯狂猛交xxx| 精品免费在线视频| 日韩视频免费中文字幕| 欧美日韩国产丝袜另类| 欧美日韩中文字幕综合视频| 欧美极度另类性三渗透| 久久精品国产成人| 久久精品国产欧美激情| 国产亚洲精品久久久久久777| 精品视频在线观看日韩| 热re91久久精品国99热蜜臀| 日韩精品在线免费| 色综合伊人色综合网| 亚洲欧洲日韩国产| 国产精品日韩久久久久| 精品国产一区久久久| 午夜精品久久久久久久99黑人| 国产精品av免费在线观看|