【发布时间】:2014-10-13 07:58:59
【问题描述】:
我有三个类的简单 Maven 项目。在我的META-INF 中,我有空的beans.xml。每次我运行我的Main.java 时,我都会得到一个NullPointerException。
Exception in thread "main" java.lang.NullPointerException
at hom.World.helloWorld(World.java:12)
at hom.Main.main(Main.java:6)
我想要完成的工作是否超出了 CDI 的范围?
Hello.java
package hom;
import javax.enterprise.inject.Default;
@Default
public class Hello {
public String hello() {
return "Hello ";
}
}
世界.java
package hom;
import javax.enterprise.inject.Default;
import javax.inject.Inject;
@Default
public class World {
@Inject
Hello hello;
public String helloWorld() {
return hello.hello() + "World!";
}
}
Main.java
package hom;
public class Main {
public static void main(String[] args) {
World helloWorld = new World();
System.out.println(helloWord.helloWorld());
}
}
【问题讨论】:
-
您仍然需要某种容器。 Spring 是一个很好的默认选择,尤其是使用 Spring Boot。
-
您可以使用 Weld 将 CDI 用于桌面应用程序,请参阅:aprogrammersguidetothegalaxy.blogspot.co.il/2010/08/…
-
@chrylis 如果我想将它用作我的 Web 应用程序的实用程序 jar 怎么办?我还需要容器吗?
-
这是场注入是一种糟糕模式的众多原因之一。如果你改用构造函数注入,你仍然可以将
@Inject放在构造函数上,但你可以通过专门传入依赖项来轻松地在容器外使用它。