2017-02-15 3 views
0

私たちはドロップウィザードアプリケーションに取り組んでおり、Guice for Injectionを使用しています。
次のhttpコールがあり、httpクライアントと残りのテンプレートをインスタンス化しています。代わりにGuiceがこれらのオブジェクトを注入する方法を探しています。どうやってやるの ?Guicier injection [Dropwizard]を使用してHttp RestTemplateを置き換えます。

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); 
    } 
} 

まず例IのGuice @Provides注釈を使用していますが個人的に好きです。 2番目は具体的なクラスへの直接バインドを使用します。両方とも同じ結果が得られ、以下に示すようにクラスに依存関係を注入することができます。

public MyClass { 
    private final RestTemplate restTemplate; 

    @Inject 
    public MyClass(RestTemplate restTemplate) { 
     this.restTemplate = restTemplate; 
    } 
} 
関連する問題