我有一个简单的注入模块:
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"这样的方法(这个方法不能从构造函数中调用)。除了构造函数,你可以在任何方法中访问注入的变量。