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

时间:2013-12-12 15:21:36

标签: maven dependency-injection 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());

    }

}

带有界面:

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崩溃。注射没有发生。

所以,我的问题是:

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

1 个答案:

答案 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可用实现的参考。