Java 7独立应用程序中的依赖注入

Jér*_*nge 10 dependency-injection maven java-7

我想在大型Java 7独立应用程序中使用依赖注入,但我不确定从哪里开始.

我写了一个小测试应用程序:

public class Main {

    @Inject
    MyInterface myInterface;

    public static void main( String[] args ) {

        Main m = new Main();
        System.out.println(m.myInterface.getMessage());

    }

}
Run Code Online (Sandbox Code Playgroud)

有一个界面:

public interface MyInterface {

    String getMessage();

}
Run Code Online (Sandbox Code Playgroud)

和接口实现:

@Singleton
public class MyInterfaceImpl implements MyInterface {

    public String getMessage() {
        return "Hello World!";
    }

}
Run Code Online (Sandbox Code Playgroud)

pom.xml包含一个依赖:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

这个应用程序编译,但当然,它NPE在尝试打印消息时崩溃.注射没有发生.

所以,我的问题是:

  1. 可以在Java 7独立应用程序中实现依赖项注入吗?
  2. 我必须包含哪些其他依赖项才能使其工作?
  3. 有没有人有一个简单的操作示例来分享(我找不到)?

Lau*_*ntG 12

使用Java的依赖注入不仅有一种方法.

(1)例如,您可以使用标准CDI,其中参考实现是Weld.有关于在Java SE环境中使用Weld的文档,可能是独立应用程序的含义.

您也可以使用Spring Framework,它也支持常见的CDI注释(例如@Inject).在这种情况下,您通常会ClasspathXmlApplicationContext在程序启动时创建一个,让Spring管理(创建/销毁)您需要的所有bean.

(2)您当前的依赖项仅导入Java EE的API.因此,如果你得到NullPointerException执行,我并不感到惊讶.您需要添加实现(如Weld)或使用Spring.

(3)见上面的链接.

另请参阅Java EE 6 CDI实现之间的差异,以获取有关其他Java CDI可用实现的参考.