【问题标题】:Guice Null pointer error on Injected Class注入类上的 Guice Null 指针错误
【发布时间】:2012-02-14 14:11:45
【问题描述】:

我正在使用带有 java play 框架的 guice。

我有一个简单的命令界面,以及一个用 java 创建的实现器,如下所示:

public interface ICommand {
public void test();
}

以及实现者

public class CommandImpl implements ICommand {
@Override
public void test() {
System.out.println("test");
}

然后是@Inject 的绑定类:

public class ICommandModule extends AbstractModule{
@Override
protected void configure() {
bind(ICommand.class).to(CommandImpl.class);
}
}

当我尝试这样的命令时:

@Inject
private static ICommand Command;
public static void index() {
Command.test();
render();
}

我收到以下错误:

来自网络浏览器:

Execution exception
NullPointerException occured : null

从控制台:

Execution exception (In /app/controllers/Application.java around line 27) NullPointerException occured : null
play.exceptions.JavaExecutionException  
  at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)  
  at Invocation.HTTP Request(Play!) 
Caused by: 
java.lang.NullPointerException  
  at controllers.Application.index(Application.java:27)     
  at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)  
  at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)  
  at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)  
  at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)  
  at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)  ... 1 more

感谢您的帮助!

【问题讨论】:

  • NPE 出现在app.controllers.Application - 你手头有相关代码吗?
  • 控制器。应用程序代码是带有@inject 的代码。你是在问这个还是我的问题错了?

标签: java playframework guice


【解决方案1】:

您正在使用staticInject 仅适用于实例变量和构造函数。 你需要在你的模块中使用requestStaticInjection

【讨论】:

  • 我意识到你是对的,注射不适用于静态空隙。谢谢你提供的详情。但是我不明白如何使用requeststaticInjection,请您给我解释一下吗?
  • 在您的模块中,在configure() 方法中,您可以调用requestStaticInjection(YourClassThatNeedsStaticInjection.class)。虽然我从未尝试过,但这是它的目的。但是你应该问问自己是否不能避免这个静态变量,例如使用 Singleton
  • 答案不正确。 Guice 模块确实适用于静态成员。
  • 这绝对是错误的。看看这里:code.google.com/p/google-guice/wiki/…
  • 这绝对是真的。我不是在谈论 google-guice 本身,我是在谈论基于 google-guice 构建的播放模块。我是这个模块的贡献者,我确切地知道它的作用。检查playframework.org/modules/guice-1.2/home
【解决方案2】:

您是否使用来自 http://www.playframework.org/modules/guice 的 guice 模块?那应该与静态字段注入一起工作。

【讨论】:

  • 为什么在这里投反对票?在投反对票之前,请确保您完全理解
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2013-10-01
  • 2018-01-01
相关资源
最近更新 更多