2017-01-31 3 views
0

Jetzt lese ich die offizielle Dokumentation von PlayFramework, aber es spielt eigentlich keine Rolle.Guice: das @Inject bei statischen Feldern

Und ich sah diesen Satz:

Beachten Sie, dass diejenigen Instanzfelder sind. Im Allgemeinen ist es nicht sinnvoll, ein statisches Feld zu injizieren, da dies die Kapselung unterbrechen würde.

Sie erklärten es ist veraltet, @Inject Annotation zu statischen Feldern zu verwenden. Warum? Ich verstehe nicht "Break Encapsulation". Was denkst du meinen sie mit dem Satz?

Antwort

0

Es ist irgendwie offensichtlich OOP-Prinzip (Verkapselung), so @Inject liefert ein Instanzfeld (das stammt aus der Play-Dokumentation), dann ist es natürlich seltsam, es statisch zu machen, seit ALLE Instanzen gleiche Objekt für das Feld A teilen, die eine der möglichen Probleme und eine der Definition von Bruch Verkapselung ist

Diese API nicht für den allgemeinen Gebrauch empfohlen, da es viele leidet der gleiche Probleme wie statische Fabriken: es ist ungeschickt zu testen, es macht Abhängigkeiten undurchsichtig, und es beruht auf globalen Status.

0

Vielleicht, weil stilistisch

class Foo 
{ 
    @Inject 
    static String propery; 
} 

equiavalent von

class Foo 
{ 
    static String propery; 

    Foo(String property) { 
    this.property = property; 
    } 
} 

diejenigen, die nicht wissen, Details der Implementierung ist, kann durch Ergebnis überrascht sein

Verwandte Themen