Ich versuche, eine Playframework Anwendung von 2,4 bis 2.5.3 zu migrieren, und ich habe Probleme Werte von application.conf
Datei zu erhalten:Wiedergabe 2.5.3: Mit Dependency Injection-Konfiguration erhalten Werte
Bevor zu erhalten ein Wert von application.conf
, was ich tun war:
Play.application().configuration().getString("label")
Jetzt als Play.application()
veraltet ist, soll ich Dependency Injection verwenden. Basierend auf dem framework documentation ich die folgenden Anweisungen verwenden:
- Import definieren: import
javax.inject.*; import play.Configuration;
- definieren Klasse Eigenschaft:
@Inject private Configuration configuration;
- Verwenden Sie die Konfigurationsklasse Eigenschaft auf meiner Klasse
Wenn ich diese Anweisungen auf meinem Controllerbefolgefunktioniert einwandfrei:
Aber wenn ich versuche, es auf einem anderen Klassenobjekt aus meinem Projekt zu verwenden, funktioniert die Abhängigkeitsinjektion nicht und ich bekomme immer eine NullPointerException
.
Kann mir jemand ein Beispiel geben, wie man Werte von application.conf
mit Abhängigkeitsinjektion erhält?
Ein Teil von meinem Java-Code, wo ich versuche, die DI zu verwenden:
import javax.inject.Inject;
import play.Configuration;
import play.Logger;
public class Zipper {
@Inject private Configuration configuration;
public void unZip(String zipFilePath) {
Logger.debug("Display : zipFilePath"+zipFilePath);
Logger.debug("before call parameter from application.conf");
Logger.debug("configuration.getString = "+configuration.getString("Unzipedfile.path"));
Logger.debug("aftercall parameter from application.conf");
}
}
Und ich an der Linie immer eine Null-Zeiger Ausnahme erhalten, mit configuration.getString("Unzipedfile.path")
Beitrag der Code, der nicht funktioniert. – marcospereira
Ich habe wie gewünscht aktualisiert.
Die gleiche Art von Code funktioniert auf meinem Controller-Anwendung.Java, aber nie auf meinen anderen Java-Klassen. – Miguel
Sie können nicht in beliebige Klassen injizieren, die nicht von DI selbst erstellt wurden oder nicht in den Guice-Kontext eingeführt wurden. Wenn Ihre Klasse Zipper von Guice erstellt oder irgendwo injiziert wurde, dann hätten Sie den Kontext zum injizieren. siehe http://stackoverflow.com/a/32896354/1956540 – BatteryAcid