Java游戏2.6-添加环境依赖项注入

Java游戏2.6-添加环境依赖项注入,java,playframework,Java,Playframework,我需要在我的一个java类中使用Play.Environment,如下所示。我正在使用Play 2.6.x。你能帮助我理解,如何在这里添加依赖注入吗。我尝试如下使用,但env对象为NULL MyFile.java public final class MyFinalClass { @Inject static Environment env; public static String getFilePath(String fileName) { return env.

我需要在我的一个java类中使用Play.Environment,如下所示。我正在使用Play 2.6.x。你能帮助我理解,如何在这里添加依赖注入吗。我尝试如下使用,但env对象为NULL

MyFile.java

public final class MyFinalClass  {

 @Inject
 static Environment env;

public static String getFilePath(String fileName)  {
        return env.rootPath().getAbsolutePath();
}
static {
//It has a static block and some code here. I dont have any constructor.
}
}
谢谢

/***************************************************************************/ 我已经修改了上述代码,并将其设置为Singleton,如下所示:

MyFinalClass.java
public class MyFinalClass   implements IConfigurationManager {

    @Inject Environment env;
    private static MyFinalClass   INSTANCE;

    //Pvt Constructor
    private MyFinalClass  () {

    }

    //Create Singleton Instance
    public static MyFinalClass instance() {
        if(INSTANCE == null) {
            INSTANCE = new MyFinalClass();
        }
        return INSTANCE;
    }
}

//Module.java
class Module extends AbstractModule {
    @Override 
    protected void configure( {

        bind(MyFinalClass.class).asEagerSingleton();
      }
Environment env;
//Pvt Constructor
@Inject private MyFinalClass  (Environment env) {
    this.env = env;
}
这里我得到的错误是:类必须有一个(并且只有一个)用@Inject注释的构造函数,或者一个非私有的零参数构造函数。

然后我修改如下:

MyFinalClass.java
public class MyFinalClass   implements IConfigurationManager {

    @Inject Environment env;
    private static MyFinalClass   INSTANCE;

    //Pvt Constructor
    private MyFinalClass  () {

    }

    //Create Singleton Instance
    public static MyFinalClass instance() {
        if(INSTANCE == null) {
            INSTANCE = new MyFinalClass();
        }
        return INSTANCE;
    }
}

//Module.java
class Module extends AbstractModule {
    @Override 
    protected void configure( {

        bind(MyFinalClass.class).asEagerSingleton();
      }
Environment env;
//Pvt Constructor
@Inject private MyFinalClass  (Environment env) {
    this.env = env;
}
在这里,我得到了新MyFinalClass expects参数的编译问题。 你能帮忙吗

谢谢

静电场注入是可行的。如果你真的需要让你的类和方法保持静态,你应该使用Guice的。 您还可以将MyFinalClass设置为单例,在构造函数中注入环境,然后在需要使用getFilePath(..)的任何位置注入MyFinalClass

编辑:我看到您对requestStaticInjection的评论,下面是关于如何使用它的简短描述。老实说,我觉得把这个班变成一个单身汉更整洁。如果在MyFinalClass中有不想包含在单例中的内容,也许应该创建一个新类

要使用requestStaticInjection(),您必须从一个模块执行请求,并且这个模块需要被删除

编辑2: 您现在已将问题更改为使用Singleton,但您做得不对。 选中,只需将@Singleton注释添加到类中即可

我们创建一个singleton和一个注入它的控制器类的示例(我直接在编辑器中编写,不是测试代码,但您明白了):


您好,我尝试使用requestStaticInjection(),如下所示:但仍然面临相同的问题。您好,我更新了答案以包含requestStaticInjection用法的示例,请看一看。您好,正如您所建议的,我创建了一个Singleton类并尝试注入。我已经修改了上面的问题。你能帮我一下吗,我在我的帖子里又加了一个例子。嗨,艾瑞克,非常感谢你的回复,非常感谢。现在我有几个问题,如果是基本的,请原谅。在我的项目中,许多Singleton类都是按照我上面提到的代码编写的@Singleton不在任何地方使用,这是使构造函数私有化的正常方法。然后在很多地方将其称为className.instance().method()。现在如果我使用@Singleton,那么我需要将Singleton类对象注入到我使用它的每个类中。另一个问题是,在您的示例中,构造函数是公共的,它不会给singleton带来任何问题。