我有一个简单的注射模块:
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()
,那么它可以正常工作。
更新
我改变它以使用构造函数注入,它一切正常,为什么我的场注入不起作用?
答案 0 :(得分:4)
首先,只有在将值注入对象之后,才会创建一些对象。因此,注入的属性在构造函数中始终为null。
如果您想在构造函数中注入值,那么您将以正确的方式使用构造函数注入。
最好的方法是不使用构造函数,对属性使用注入,并使用像“build”这样的方法(不能从构造函数中调用此方法)。您可以在任何方法中访问注入的变量但是构造函数。