2017-02-15 82 views
0

我們正在開發一個drop-wizard應用程序並使用Guice進行注入。
我有以下的http調用,我正在實例化http客戶端和rest模板。相反,我正在尋找Guice注入這些對象的方法。我怎樣才能做到這一點 ?使用Guicier注入替換Http RestTemplate [Dropwizard]

RestTemplate restTemplate = new RestTemplate(); 
     HttpHeaders headers = new HttpHeaders(); 
     HttpEntity request; 
     headers.set("Accept", MEDIA_TYPE); 
     request = new HttpEntity(jsonContent, headers); 

    return restTemplate.exchange(url, httpMethod, request, String.class); 

回答

3

理想情況下,您會爲經常創建的對象創建工廠,並將工廠注入爲依賴關係。對於單元測試,您可以模擬工廠的輸出並完全控制代碼流。

但是,如果要注入RestTemplate作爲直接依賴關係,那麼你可以寫這樣的模塊:

public MyModule extends AbstractModule { 
    @Override 
    public void configure() { 
    } 

    @Provides 
    public RestTemplate providesRestTemplate() { 
     return new RestTemplate(); 
    } 
} 

或者這樣:

public MyModule extends AbstractModule { 
    @Override 
    public void configure() { 
     bind(RestTemplate.class); 
    } 
} 

第一個示例使用吉斯@Provides註解我個人喜歡。第二個使用直接綁定到具體類。兩者都達到相同的結果,您可以將依賴關係注入到下面給出的類中。

public MyClass { 
    private final RestTemplate restTemplate; 

    @Inject 
    public MyClass(RestTemplate restTemplate) { 
     this.restTemplate = restTemplate; 
    } 
}