Play框架2.4 -注入的字段总是空的



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

public class InjectionModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(SomeModel.class);
        bind(SomeData.class);
    }
}

在my 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(),那么它就可以工作了。

我把它改为使用构造函数注入,它都工作得很好,为什么我的字段注入不工作?

首先,注入器创建一些对象,只有在此之后注入值到对象。所以注入的属性在构造函数中总是空的。

如果你想在构造函数中注入值,那么使用构造函数注入的方法是正确的。

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

最新更新