【问题标题】:Nullpointer Exception when trying to access Injected Bean尝试访问注入的 Bean 时出现 Nullpointer 异常
【发布时间】:2017-08-06 10:01:10
【问题描述】:

我有一个 Maven 多模块项目。当尝试访问注入的 bean 时,我得到一个 Nullpointer 异常。

这是启动应用程序的主函数

public class App {

    public static void main(String[] args) {
        System.out.println("Startpoint");
        DecisionMaker decisionMaker = new DecisionMaker();
        decisionMaker.run();
    }
}

这就是我在决策者中所做的

public class DecisionMaker {

@Inject
GameListener gm;

@Inject
BasicProductionManager basicProductionManager;

public DecisionMaker() {
    System.out.println("this is the decisionmaker");
    System.out.println(gm.toString());
}

所以这不是一个 bean,而是一个普通的 pojo

gamelistener 是我想要注入的 Applicationscoped bean。

@Named
@ApplicationScoped

public class GameListener extends DefaultBWListener {

@Inject
Event<OnFrameEvent> onFrameEvent;

public Mirror mirror = new Mirror();

public Game game;

public Player self;

@PostConstruct
public void init() {
    System.out.println("init listener");
}

nullpointer 被抛出到 DecisionMaker 的构造函数中。没有调用@PostConscrutct init 方法

我研究了类似的问题,但我发现我需要我已经拥有的 PostConstruct 方法。

【问题讨论】:

  • 有没有spring应用上下文?看起来不像 - 您如何期望 gm 获得价值?谁/什么应该设置它?
  • 你用的是什么依赖注入框架?
  • javaxjavaee-api7​​.0providedjavax.injectjavax.inject1
  • new 不尊重注释。您需要正确地向框架询问实例。

标签: java maven code-injection


【解决方案1】:

你不能自己实例化DecisionMaker。 CDI 的全部意义在于赋予它创建和管理 bean 的控制权。

查看article 了解如何在 JAVA SE 中使用 CDI。

【讨论】:

  • 非常感谢我会试试这个,我想我必须先从我的静态主函数创建一个对象才能让项目滚动。
  • @MarcusLanvers 将 CDI 视为 Spring IOC,您无需自己创建或管理任何实例,而是将责任交给 Spring。
  • 好的,我想我明白了,但我仍然有一个问题,我的起点是静态主函数,在我这样创建我的 bean 之后: Weldweld = new Weld(); WeldContainer 容器 =weld.initialize(); DecisionMaker 应用程序 = container.instance().select(DecisionMaker.class).get();决策者.run();焊接.关机(); :我有一个问题,它说 DecisionMaker.run();必须是静态的,我不希望它是静态的
  • @MarcusLanvers 因为你说的是​​DecisionMaker.run(); 而不是application.run(),请将实例变量重命名为DecisionMaker
  • 哦,我太愚蠢了,我很抱歉没有先看TT。非常感谢它现在应该可以工作了
猜你喜欢
  • 2015-02-05
  • 2015-04-16
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多