Playframeworkアプリケーションを2.4から2.5.3に移行しようとしていますが、_application.conf
_ファイルから値を取得するのに問題があります。
Before_application.conf
_からの値を取得するために私がしたことは:
_Play.application().configuration().getString("label")
_
現在Play.application()
は非推奨であるため、依存性注入を使用する必要があります。 フレームワークドキュメント に基づいて、次の手順を使用します。
javax.inject.*; import play.Configuration;
_@Inject private Configuration configuration;
_コントローラでこれらの指示に従うと、_Application.Java
_は完全に機能しています。
しかし、プロジェクトの他のクラスオブジェクトで使用しようとすると、依存性注入が機能せず、常にNullPointerException
が返されます。
依存性注入を使用して_application.conf
_から値を取得する方法の例を誰かに教えてもらえますか?
DIを使おうとする私のJavaコードの一部:
_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");
}
}
_
そして、configuration.getString("Unzipedfile.path")
の行で常にnullポインタ例外が発生します
同じ問題を抱えている人を助けるために、私はここに答えを置きました
私のエラーは、呼び出し元のクラスからZipper Javaクラスをインスタンス化するために使用した方法に起因していました。
Igmar Palsenbergに感謝し、彼は私に答えを提供しました: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/play-framework/uLFqTM9_Iy4
Zipper zipTest = new Zipper();を使用してZipperクラスをインスタンス化し、Zipper zipTest =を使用する必要がありますインジェクター.instanceOf(Zipper.class);
次のように構成を初期化できると思います。
private Configuration configuration = Play.current().injector().instanceOf(Configuration .class);
したがって、ジッパーは次のようになります。
import javax.inject.Inject;
import play.Configuration;
import play.Logger;
public class Zipper {
private Configuration configuration = Play.current().injector().instanceOf(Configuration .class);
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");
}
}
代わりにコンストラクタインジェクションを試してください。
import javax.inject.Inject;
import play.Configuration;
import play.Logger;
public class Zipper {
private Configuration configuration;
@Inject
public Zipper(Configuration config) {
this.configuration = config;
}
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");
}
}
Guiceがprivate
フィールドを挿入できるかどうかはわかりません。とにかく、コンストラクターインジェクションが推奨されるインジェクションタイプです。
private
を削除してみてください。使用する:
@Inject Configuration configuration;
の代わりに:
@Inject private Configuration configuration;
PlayがBeanを検出してリソースを注入できるように、クラスにSingletonアノテーションを付けるようにしてください。