【问题标题】:CDI on a type throws NPE类型上的 CDI 抛出 NPE
【发布时间】:2019-04-01 04:44:13
【问题描述】:

我正在尝试了解 CDI。我有一个界面:

public interface Person {
    public String getName();
}

还有一个实现Person的类:

public class Male implements Person {
    public Male() {}
    @Override
    public String getName() {
        return "ra";
    }
}

在主课上,我试过了:

public class Main {
    @Inject
    private Person person;
    public static void main(String... args) {
        System.out.println(new Main().person.getName());
    }
}

但是上面的代码在person.getName() 上抛出了NPE。我使用 maven 创建了项目,javaee api 的范围是compile。我做错了什么?

【问题讨论】:

    标签: java jakarta-ee


    【解决方案1】:

    您似乎错过了启动 CDI 容器。

    请注意,类上的任何注释都类似于便利贴。它实际上只是一个附加信息,而不是真正的代码。必须解释此信息。这就是 CDI 容器的作用。 我写了一篇介绍 CDI 的文章,其中解释了一些基础知识: https://jaxenter.com/tutorial-introduction-to-cdi-contexts-and-dependency-injection-for-java-ee-jsr-299-104536.html

    你错过了什么:

    1.) 添加一个空的 META-INF/beans.xml 文件。或者在你的 Male.java 类中添加一个像 @ApplicationScoped 这样的范围注释。

    2.) 添加一个 CDI 容器。有多种选择。如果你想使用 Apache OpenWebBeans CDI 容器,那么你可以在这里找到一些信息https://openwebbeans.apache.org/owbsetup_se.html 你也可以在这里找到一个工作样本

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多