Play 2.5.3: Using dependency injection to get configuration values

*爱你&永不变心* 提交于 2019-12-03 03:27:34

I think that you can initialize the configuration like this:

private  Configuration configuration = Play.current().injector().instanceOf(Configuration .class);

So, your Zipper will be:

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");
    }
}

Try with constructor injection instead:

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");
    }
}

I'm not sure that Guice is capable of inject private fields. Anyway, constructor injection is the recommended injection type.

I put here the answer, in order to help anyone with the same issue

My error came from the way i used to instantiate my Zipper java class from my calling class.

Thx to Igmar Palsenberg, he provided me the answer : https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/play-framework/uLFqTM9_Iy4

I used Zipper zipTest = new Zipper(); to instanciate my Zipper class and i have to use Zipper zipTest = injector.instanceOf(Zipper.class);

Tony Hsieh

you should try to remove private. use:

@Inject Configuration configuration;

instead of:

@Inject private  Configuration configuration;

Try to annotate your class with Singleton so that play can detect your bean to inject your resources.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!