我想在大型Java 7独立应用程序中使用依赖注入,但我不确定从哪里开始。
我写了一个小测试应用程序:
public class Main {
@Inject
MyInterface myInterface;
public static void main( String[] args ) {
Main m = new Main();
System.out.println(m.myInterface.getMessage());
}
}
带有界面:
public interface MyInterface {
String getMessage();
}
和接口实现:
@Singleton
public class MyInterfaceImpl implements MyInterface {
public String getMessage() {
return "Hello World!";
}
}
pom.xml
包含一个依赖项:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
此应用程序编译,但当然,在尝试打印消息时,它会与NPE
崩溃。注射没有发生。
所以,我的问题是:
答案 0 :(得分:12)
使用Java的依赖注入不仅有一种方法。
(1)例如,您可以使用标准CDI,其中参考实现为Weld。有关于using Weld in a Java SE environment的文档,独立应用程序的含义可能是什么。
您也可以使用Spring Framework,它也支持常见的CDI注释(例如@Inject
)。在这种情况下,您通常会在程序启动时创建ClasspathXmlApplicationContext
,让Spring管理(创建/销毁)您需要的所有bean。
(2)您当前的依赖项仅导入Java EE的API。因此,如果你在执行时获得NullPointerException
,我并不感到惊讶。您需要添加一个实现(如Weld)或使用Spring。
(3)见上面的链接。
另请参阅Differences between Java EE 6 CDI Implementations以获取有关其他Java CDI可用实现的参考。