java - 类型上的 CDI 会抛出 NPE

标签 java jakarta-ee

我正在尝试了解 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。我做错了什么?

最佳答案

您似乎错过了启动 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 文件。或者将像 @ApplicationScoped 这样的作用域注释添加到 Male.java 类中。

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

关于java - 类型上的 CDI 会抛出 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443350/

相关文章:

javax.imageio.IIOException : Missing Huffman code table entry while Adding text to an jpg image

java - Maven项目构建异常

java - Apache nutch 不再爬行

java - 我们可以在客户端获取小程序代码吗

jakarta-ee - Ehcache 更新元素

hibernate - 是否可以使@Formula注释延迟加载?

java - 如何在playframework java中使用json-api格式?

java调度程序不工作

java - Spring 注解 : form validation of a bean internal object attribute using thymeleaf

java - Java 中时间派生属性的最佳实践