【问题标题】:Play Framework 2.4 - Injected fields are always nullPlay Framework 2.4 - 注入的字段始终为空
【发布时间】:2015-09-14 23:54:39
【问题描述】:

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

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 类中,我尝试注入一些依赖项,但它们始终为空,我正在做的是:

@Inject
private SomeData data;

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

但data 始终为空。

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

更新

我改成使用构造函数注入,一切正常,为什么我的字段注入不起作用?

【问题讨论】:

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


    【解决方案1】:

    首先注入器创建一些对象,然后才将值注入对象。所以注入的属性在构造函数中总是为空的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      相关资源
      最近更新 更多