【发布时间】:2014-11-04 06:45:59
【问题描述】:
所以,我第一次尝试 CDI 有点像狗。我已经阅读了大量文章并尝试了各种简单到复杂的示例,但均未成功。这是我当前的简单示例。我做错了什么?
Maven 项目:
beans.xml(位于 src/main/resources/META-INF)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1"
bean-discovery-mode="all">
</beans>
Printer.java
import javax.inject.Inject;
public class Printer {
@Inject Greeting greeting;
}
Greeting.java
import javax.enterprise.inject.Default;
@Default
public class Greeting {
public void sayStuff(){ System.out.println("Stuff"); }
}
Main.java
public class Main {
public static void main( String[] args ) {
new Printer().greeting.sayStuff();
}
}
错误
它构建良好,但在尝试运行时出现错误
线程“main”中的异常 java.lang.NullPointerException 在 com.foo.app.CDI_test.Main.main(Main.java:5)
这正是我尝试在问候属性上调用sayStuff() 的时候。
为什么它没有被实例化?教程声称 @Default 也过分了。我尝试过同时使用 custructor-injection 和 setter-injection,没有雪茄。
EDIT 1 - 添加 pom.xml 依赖项
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.4.Final</version>
</dependency>
</dependencies>
EDIT 2 - 版本信息
- Java 1.7
- Eclipse Luna 4.4.0
- IntelliJ IDEA 13.1.4
【问题讨论】: