我想在大型 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!";
}
}
The pom.xml
包含一个依赖项:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
该应用程序可以编译,但是当然,它会崩溃并出现以下错误:NPE
当尝试打印消息时。注射尚未发生。
所以,我的问题是:
- 可以在 Java 7 独立应用程序中实现依赖注入吗?
- 我还必须包含哪些其他依赖项才能使其正常工作?
- 有谁有一个简单的操作示例可以分享(我找不到)?
使用 Java 进行依赖注入的方法不只有一种。
(1) 例如,您可以使用标准 CDI,其中参考实现是Weld http://weld.cdi-spec.org/。有关于的文档在 Java SE 环境中使用 Weld http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#d0e5586,你的意思可能是什么独立应用程序.
您也可以使用Spring框架 http://projects.spring.io/spring-framework/,它还支持常见的 CDI 注释(例如@Inject
)。在这种情况下,您通常会创建一个ClasspathXmlApplicationContext http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#resources-app-ctx-classpathxml在程序启动时让 Spring 管理(创建/销毁)您需要的所有 bean。
(2) 您当前的依赖项仅导入Java EE的API。因此,如果你得到一个,我并不感到惊讶NullPointerException
在执行时。您需要添加一个实现(如 Weld)或使用 Spring。
(3) 请参阅上面的链接。
还看一下Java EE 6 CDI 实现之间的差异 https://stackoverflow.com/questions/2270379/differences-between-java-ee-6-cdi-implementations获取有关其他 Java CDI 可用实现的参考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)