2017-02-15 3 views
0

Wir arbeiten an einer Drop-Wizard-Anwendung und verwenden Guice für die Injektion.
Ich habe den folgenden http-Aufruf und ich bin die Instantiierung der http-Client und Rest-Vorlage. Stattdessen suche ich nach Wegen, wie Guice diese Objekte injizieren kann. Wie kann ich das machen ?Replace Http RestTemplate mit Guicier-Injektion [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); 

Antwort

3

Im Idealfall würden Sie Fabriken für die Objekte erstellen, die häufig erstellt werden und die Fabriken als Abhängigkeiten injizieren. Beim Komponententest können Sie die Ausgabe von Fabriken überspionieren und die vollständige Kontrolle über den Codefluss haben.

Aber wenn Sie RestTemplate als direkte Abhängigkeit injizieren wollen, dann können Sie ein Modul wie folgt schreiben:

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

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

Oder wie folgt aus:

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

Erstes Beispiel verwendet Guice @Provides Anmerkung die ich persönlich bevorzugen. Der zweite verwendet eine direkte Bindung an die konkrete Klasse. Beide erzielen das gleiche Ergebnis und Sie können die Abhängigkeit wie unten angegeben in eine Klasse einfügen.

public MyClass { 
    private final RestTemplate restTemplate; 

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