我试图了解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
。我在做什么错了?
答案 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这里找到一些信息。 您还可以在这里找到工作示例