类型上的CDI引发NPE

时间:2019-03-31 17:08:41

标签: java java-ee

我试图了解CDI。我有一个界面:

SELECT JSON_OBJECT(*) FROM hr.employees ;

{
"EMPLOYEE_ID" : 100,
"FIRST_NAME" : "Steven",
"LAST_NAME" : "King",
"EMAIL" : "SKING",
"PHONE_NUMBER" : "515.123.4567",
"HIRE_DATE" : "2003-06-17T00:00:00",
"JOB_ID" : "AD_PRES",
"SALARY" : 24000,
"COMMISSION_PCT" : null,
"MANAGER_ID" : null,
"DEPARTMENT_ID" : 90
}                       --row 1
{
"EMPLOYEE_ID" : 101,
"FIRST_NAME" : "Neena",
"LAST_NAME" : "Kochhar",
"EMAIL" : "NKOCHHAR",
"PHONE_NUMBER" : "515.123.4568",
"HIRE_DATE" : "2005-09-21T00:00:00",
"JOB_ID" : "AD_VP",
"SALARY" : 17000,
"COMMISSION_PCT" : null,
"MANAGER_ID" : 100,
"DEPARTMENT_ID" : 90
}                       --row 2
 ...

还有一个实现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()); } } 上抛出了NPE。我使用maven创建了项目,person.getName() api的范围是javaee。我在做什么错了?

1 个答案:

答案 0 :(得分: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文件。或将@ApplicationScoped之类的范围注释添加到Male.java类中。

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