2013-06-06 13 views
5

Ich verwende guice und sah ein Beispiel, das binder().requireExplicitBindings()here verwendet.
Das Beispiel sieht so aus:ist es obligatorisch/empfohlen zu verwenden requireExplicitBindings

Injector injector = Guice.createInjector(new SandwichModule(), new AbstractModule() { 
    @Override 
    protected void configure() { 
     binder().requireExplicitBindings(); 
     bind(GuiceFilter.class); 
    } 
}); 

, dass Ausnahmen wie

verursachen
com.google.inject.ConfigurationException: Guice configuration errors: 

1) Explicit bindings are required and ... 

ist es zwingend notwendig, es zu benutzen, oder einfach nur zu empfehlen? und wenn es nur empfohlen wird, frage ich mich nur, warum man es benutzt?

Antwort

3

Es ist weder obligatorisch (dann wäre dies eine Standardeinstellung ohne die Notwendigkeit der Aktivierung) noch erforderlich. Normalerweise, wenn Sie guice verwenden, möchten Sie alle "Magie" haben, um Ihnen zu helfen, Ihre Anwendung zusammen zu kleben. Das Standardverhalten lautet also: Sie benötigen keine expliziten Bindungen. Aber ab und zu merkt man, dass Ihnen die Automatismen in den Weg kommen. In diesen seltenen Fällen würden Sie den Require-Schalter verwenden. Ich habe den ganzen Artikel, den Sie zur Verfügung gestellt haben, nicht gelesen, daher kann ich nicht sagen, ob es sich um einen dieser "Sonderfälle" handelt oder ob sie nur eine Flagge verwenden, ohne wirklich zu überlegen, warum. Wie auch immer, wenn Sie Ihre verbindlichen Module schreiben, lassen Sie es einfach weg.

1

Ich denke, dieser Schalter könnte sehr nützlich sein, Sie zu Punkt schneller zu Programmierfehlern, wo man zu Unrecht etwas als injizierbare kommentierten, die nicht injiziert werden soll, wie hier:

@Inject 
private SomeClass someInstance = new SomeClass(12); 

Wenn Someclass nun auch eine öffentliche nicht hat -argument constructor würde Guice einfach die spezifische Instanz überschreiben, ohne etwas zu sagen.

Allerdings ist die Nützlichkeit der automatischen Injektion in der Regel viel mehr als das Gewicht, so für dieses spezielle Beispiel müssen Sie nur darauf achten, nicht "alles" aus Versehen "injizieren :)

Verwandte Themen