Nei*_*los 5 java dependency-injection guice playframework playframework-2.4
我有一个简单的注射模块:
public class InjectionModule extends AbstractModule {
@Override
protected void configure() {
bind(SomeModel.class);
bind(SomeData.class);
}
}
Run Code Online (Sandbox Code Playgroud)
它在我的application.conf中启用
play {
modules {
enabled += "com.example.InjectionModule"
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我想创建一个新模型,我这样做:
public Promise<Result> getPage() {
return handleRequest(() -> Play.application().injector().instanceOf(SomeModel.class));
}
Run Code Online (Sandbox Code Playgroud)
handleRequest()只是处理创建承诺和调用process()模型.
在我的SomeModel类中,我尝试注入一些依赖项,但它们总是为null,我正在做的是:
@Inject
private SomeData data;
void process() {
// do something
// but data is always null
}
Run Code Online (Sandbox Code Playgroud)
但data总是空的.
请注意,如果我只是使用new SomeData()它然后它工作.
更新
我把它改成使用构造函数注入,一切正常,为什么我的场注入不起作用?
首先,注入器创建一些对象,只有在此之后才将值注入到该对象中。因此,注入的属性在构造函数中始终为 null。
如果您想在构造函数中注入值,则可以通过正确的方式使用构造函数注入。
最好的方法是不要使用构造函数,对属性使用注入,并使用诸如“build”之类的方法(不得从构造函数调用此方法)。您可以在除构造函数之外的任何方法中访问注入的变量。