2016-03-28 11 views
0

ich folgenden Code haben:Java, Abhängigkeitsinjektion Singleton?

public class DummyService { 

    // Create new DummyModel with default value, 
    // Set value read from config file 
    private static final DummyModel INSTANCE = new DummyModel(Play.application().configuration().getString('some-value')); 

    public static DummyModel get() { 
    return INSTANCE; 
    } 
} 

Und ich benutze es:

DummyService.get().someMethod(); 

Jetzt versuche ich Unit-Test, der diese DummyService verwenden zu schreiben, aber das ist hart, da DummyModel statische Instanz erstellen ist aus einer Konfigurationsdatei.

Ich versuche, Singleton mit Abhängigkeitsmuster zu erstellen, aber ich weiß nicht wirklich, ob ich es richtig mache. Was ich erstellt:

@Singleton 
public class DummyService { 
    private Configuration config; 
    private DummyModel dummy; 

    @Inject 
    public DummyService(Configuration config) { 
    this.configuration = config; 
    this.dummy = new DummyModel(config.getString('some-value')); 
    } 
} 

Will ich neue DummyService zu schaffen haben und bieten jedes Mal Config?

Wird DummyModel noch Singleton sein?

Sollte ich Setter oder Ctor inject verwenden?

Kann ich Standardwert config und neuen CTOR zu schaffen, die nicht nur Argumente haben:

 private Configuration config = Play.application().configuration(); 

    @Inject 
     public DummyService() { 
     this.dummy = new DummyModel(config.getString('some-value')); 
     } 

Antwort

0

Haben Sie eine Factory-Klasse für DummyModel erstellen und sie als Konstruktorargument injiziert. Auf diese Weise ist es einfacher zu testen, da Sie das DummyModel für Ihre Komponententests leicht verspotten können.

Haben Sie die untere Zeile in Ihrer DummyModelFactory-Klasse für bessere Klarheit und Zweck.

this.dummy = new DummyModel(config.getString('some-value')); 
Verwandte Themen