2013-12-12 10 views
10

大きなJava 7スタンドアロンアプリケーションで依存性注入を使用したいと思いますが、どこから起動するのかはわかりません。Java 7スタンドアロンアプリケーションの依存性注入

public interface MyInterface { 

    String getMessage(); 

} 

とインタフェースの実装:インタフェースと

public class Main { 

    @Inject 
    MyInterface myInterface; 

    public static void main(String[] args) { 

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

    } 

} 

Iが小さなテストアプリケーションを書いた

@Singleton 
public class MyInterfaceImpl implements MyInterface { 

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

} 

pom.xmlは、1つの依存関係が含まれています

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

このアプリケーションはコンパイルされますが、もちろんメッセージを印刷しようとするとNPEでクラッシュします。注射は起こっていない。

だから、私の質問は以下のとおりです。

  1. は、Java 7スタンドアロンアプリケーションで実現することが、注射を依存関係することはできますか?
  2. 動作させるために他にどのような依存関係を含める必要がありますか?
  3. 誰も簡単な操作例を共有していますか(私は何も見つかりませんでした)?
+0

スタンドアロンアプリケーションの定義は何ですか? –

+0

Webサーバー/コンテナを実行する必要はありません。Java SE ... – JVerstry

答えて

12

Javaで依存関係注入を使用する方法は1つだけではありません。

(1)参考実装がWeldである標準CDIを使用できます。 using Weld in a Java SE environmentに関するドキュメントがあります。スタンドアロンアプリケーションの意味は?

代わりにSpring Frameworkを使用することもできます。Spring Frameworkは、一般的なCDIアノテーション(例:@Inject)もサポートしています。この場合、通常はプログラムの起動時にClasspathXmlApplicationContextを作成し、必要なすべてのBeanをSpringが管理(作成/破棄)できるようにします。

(2)現在の依存関係は、Java EEのAPIのみをインポートします。したがって、あなたが実行時にNullPointerExceptionを取得した場合、私は驚くことではありません。実装(Weldなど)を追加するか、Springを使用する必要があります。

(3)上記のリンクを参照してください。

他のJava CDI利用可能な実装についての参考情報を入手するには、Differences between Java EE 6 CDI Implementationsを参照してください。

+0

Weld、それについて聞いたことはありません。 docを読んで、素晴らしいね... – JVerstry