Play Framework 2.4 - 注入的字段始终为空
Posted
技术标签:
【中文标题】Play Framework 2.4 - 注入的字段始终为空【英文标题】:Play Framework 2.4 - Injected fields are always null 【发布时间】:2015-09-14 23:54:39 【问题描述】:我有一个简单的注入模块:
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
类中,我尝试注入一些依赖项,但它们始终为空,我正在做的是:
@Inject
private SomeData data;
void process()
// do something
// but data is always null
但data
始终为空。
请注意,如果我只使用new SomeData()
,那么它可以工作。
更新
我改成使用构造函数注入,一切正常,为什么我的字段注入不起作用?
【问题讨论】:
【参考方案1】:首先注入器创建一些对象,然后才将值注入对象。所以注入的属性在构造函数中总是为空的。
如果您想在构造函数中注入值,那么您将通过正确的方式使用构造函数注入。
最好的方法是不使用构造函数,在属性上使用注入,并使用像“build”这样的方法(这个方法不能从构造函数中调用)。您可以在除构造函数之外的任何方法中访问注入的变量。
【讨论】:
以上是关于Play Framework 2.4 - 注入的字段始终为空的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework 2.4 在 Scala 模板中使用注入变量