Play Framework 2.4 - 注入的字段始终为空
Play Framework 2.4 - Injected fields are always null
我有一个简单的注入模块:
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
class 中,我尝试注入一些依赖项,但它们始终为空,我正在做的是:
@Inject
private SomeData data;
void process() {
// do something
// but data is always null
}
但 data
始终为空。
请注意,如果我只使用 new SomeData()
就可以了。
更新
我将其更改为使用构造函数注入并且一切正常,为什么我的字段注入不起作用?
首先,注入器创建一些对象,然后才将值注入到对象中。因此注入的属性在构造函数中将始终为 null。
如果你想在构造函数中注入值,你正在使用构造函数注入的正确方法。
最好的方法是不使用构造函数,对属性使用注入,并使用像 "build" 这样的方法(不能从构造函数调用此方法)。您可以在除构造函数之外的任何方法中访问注入的变量。
我有一个简单的注入模块:
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
class 中,我尝试注入一些依赖项,但它们始终为空,我正在做的是:
@Inject
private SomeData data;
void process() {
// do something
// but data is always null
}
但 data
始终为空。
请注意,如果我只使用 new SomeData()
就可以了。
更新
我将其更改为使用构造函数注入并且一切正常,为什么我的字段注入不起作用?
首先,注入器创建一些对象,然后才将值注入到对象中。因此注入的属性在构造函数中将始终为 null。
如果你想在构造函数中注入值,你正在使用构造函数注入的正确方法。
最好的方法是不使用构造函数,对属性使用注入,并使用像 "build" 这样的方法(不能从构造函数调用此方法)。您可以在除构造函数之外的任何方法中访问注入的变量。