播放2.4.2给出null的JavaW

时间:2017-01-06 07:03:28

标签: java dependency-injection playframework playframework-2.4 playframework-webservice

我试图在play 2.4中使用JavaWs,因为我已将javaW添加到依赖

然后将@Inject static WSClient ws;添加到我的控制器。

但问题是,如果我这样做

Logger.info(ws);

在我的控制器方法中,它在控制台中打印null。我似乎无法弄清楚这个问题,因为如果它是依赖问题,那么WsClient就不会被导入。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

根据Guice documentation不建议使用静态注射,应该是使用它的特殊原因。为了使用静态注入,您应该添加到模块配置以下内容:

 requestStaticInjection(WSClient.class); 

但我建议只从WSClient ws中删除静态。

使用Provider注入更好。在这种情况下,WSClient仅在真正需要时才会被实例化。注入:

@Inject
private Provider<WSClient> wsProvider; 

创建WSClient:

WSRequest request = wsProvider.get().url("url");

此外,如果您要对控制器进行单元测试,则直接注入WSClient可能会出现问题。

您可以在此post中详细了解Play中的注射情况;尽管该帖子引用了Play 2.5,但2.4的所有想法都相似。