Play Framework 2.4 - 注入的字段始终为空

时间:2015-09-14 23:54:40

标签: java playframework dependency-injection guice playframework-2.4

我有一个简单的注射模块:

public class InjectionModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(SomeModel.class);
        bind(SomeData.class);
    }
}

在我的application.conf中启用它

play {
  modules {
    enabled += "com.example.InjectionModule"
  }
}

在我的控制器中我想创建一个新模型,我这样做:

public Promise<Result> getPage() {
    return handleRequest(() -> Play.application().injector().instanceOf(SomeModel.class));
}

handleRequest()只处理创建承诺并在模型上调用process()

在我的SomeModel类中,我尝试注入一些依赖项,但它们总是为null,我正在做的是:

@Inject
private SomeData data;

void process() {
    // do something
    // but data is always null
}

data始终为空。

请注意,如果我只使用new SomeData(),那么它可以正常工作。

更新

我改变它以使用构造函数注入,它一切正常,为什么我的场注入不起作用?

1 个答案:

答案 0 :(得分:4)

首先,只有在将值注入对象之后,才会创建一些对象。因此,注入的属性在构造函数中始终为null。

如果您想在构造函数中注入值,那么您将以正确的方式使用构造函数注入。

最好的方法是不使用构造函数,对属性使用注入,并使用像“build”这样的方法(不能从构造函数中调用此方法)。您可以在任何方法中访问注入的变量但是构造函数。