2

私は溶接の初心者であり、数日間の調査を通じて、溶接の基本的な概念しか知りません。


私はJava SE環境で溶接コンテナを使用するつもりです。Java SEでCDIとJPAを使用する最も簡単な方法は何ですか? 私のコードセグメントは以下の通りです:

public class SayHello {
    public SayHello(){}
       public void sayHello(){
       System.out.println("Hello");
   }
}

import javax.inject.Inject;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

public class UseInject {
    private SayHello obj;
    public UseInject(){}

    @Inject
    public UseInject(SayHello obj){
        this.obj = obj;
    }

    public void show(){
        obj.sayHello();
    }

    public static void main(String[] args){
         Weld weld = new Weld();
         WeldContainer container = weld.initialize();
         UseInject ui = container.instance().select(UseInject.class).get();
         ui.show();
         weld.shutdown();
    }
  } 

私のアプリケーションはmavenに基づいています。pom.xmlの jar 依存関係セグメントは次のとおりです。

 <dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.0.Alpha17</version>

私の意図は、SayHello オブジェクトを UseInject オブジェクトに挿入することであり、このアプリケーションの最終出力は "Hello" です。しかし、物事はそれほどスムーズではなく、jvm は次のエラーを報告します。

ここに画像の説明を入力

そして、インターネットから検索すると、空のbeans.xmlを作成しても問題ないということわざがあり、私はそれに従うと効果がありません。そして、主な方法については、私が模倣する Java SEでCDIとJPAを使用する最も簡単な方法は何ですか? Java SE で CDI と JPA を使用する最も簡単な方法は何ですか? @Producesアノテーションを使用します。私もそれを使用する必要があるかどうかわかりません。そして、SayHelloクラスに使おうと思ったのですが、どのjarをインポートすればいいのか分からず、断念。


今私がしたいこと: 1. se アプリケーションの溶接サービスの方法、つまり main メソッドが何をするかを知りたいですか?


2. 溶接を使用してアプリケーションを正常に実行するにはどうすればよいですか?


3. @Produces アノテーションを使用する必要がある場合


そして、私は多くの関連する問題、例えば、weld や java se JUnit テストでweld-se をブートストラップする方法などを参照しましたが、それらはすべて私にとって上級者であることがわかりました。 ご清聴ありがとうございました。

4

1 に答える 1

3
  1. 溶接を使用してアプリケーションを正常に実行するにはどうすればよいですか?

エラー メッセージはbeans.xml、ディレクトリの下にという名前のファイルを作成する必要があることを示していますMETA-INF。したがって、問題を解決するには、次の手順を実行します。

  1. ディレクトリMETA-INFの下に名前が付けられたsrc/main/resourcesディレクトリ
  2. プロジェクトで CDI が有効になるように、beans.xml以下の名前の空のファイルを作成します。META-INF
  1. 注釈 @Produces を使用する必要がある場合

Integer、String などの Java プリミティブ型を CDI Bean として使用する場合、またはクラスパスにファイルを含まない外部ライブラリの任意の型/クラスを使用する場合は、この注釈を使用します。META-INF/beans.xml

例:

public class SayHello {

    @Produces
    private double pi = 3.14159;
    // the rest of the code
}

PIコードの別の場所に次のように値を挿入できます。

public class UseInject {

    @Inject
    private double pi;  // 3.14159 will be injected here

    // the rest of the code

    public static void main(...) {
        // ....
        UseInject ui = container.instance().select(UseInject.class).get();
        ui.show();
        System.out.println(ui.pi);
        // ...
    }

値 3.14159 がコンソールに表示されるはずです。

于 2016-09-24T16:35:05.933 に答える