9

CDI が機能するための前提条件を完全に理解していることを確認したいだけです。私がクラスAを持っている場合:

public class A {
    @Inject private B b;
}

このクラスをインスタンス化すると、次のようになります。

A a = new A();

その場合、Ab は null になります。

しかし、別のクラスでメンバーを定義すると:

@Inject A a;

後で a を使用すると、ab は正しく入力されますか?

CDI は、インジェクションを必要とするクラスが CDI コンテナーによっても作成された場合にのみ機能しますか? または、new を使用した通常のインスタンス化を使用して POJO を作成しているときにインジェクションが null であることが判明した場合 (はい、beans.xml を配置しました)、何が欠けていますか?

4

5 に答える 5

10

CDI は、インジェクションを必要とするクラスが CDI コンテナーによっても作成された場合にのみ機能しますか?

はい、それだけです。のライフサイクルはManagedBeanコンテナーによって制御され、newキーワードを使用してインスタンス化することはできません (ところで、EJB と Spring Bean についても同じことが言えます)。新しい ManagedBean を作成する必要がある場合は、プロデューサー メソッドを使用することをお勧めします。

于 2012-08-22T19:49:54.953 に答える
1

はい、メソッド呼び出しでインターセプターを使用して行われるため、@Inject はコンテナー内でのみ機能します。コンテナーが Bean を作成すると、注入を実行するインターセプターでそれをラップします。また、newを使用したインスタンス化の場合、 Bean メソッドの呼び出し中にインターセプターは呼び出されず、注入はありません。

于 2012-08-22T19:50:14.963 に答える
0

クラスがマネージド Bean になるために必要な条件は次のとおりです (したがって、@Inject アノテーションがそのフィールド/メソッドで機能するために)。

http://docs.oracle.com/javaee/6/tutorial/doc/gjfzi.html

于 2012-08-22T19:49:28.150 に答える