Java游戏2.6-添加环境依赖项注入
我需要在我的一个java类中使用Play.Environment,如下所示。我正在使用Play 2.6.x。你能帮助我理解,如何在这里添加依赖注入吗。我尝试如下使用,但env对象为NULL MyFile.javaJava游戏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.
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带来任何问题。