3

私はCDIを初めて使用し、使用法を検索しようとしましたが、何も見つからなかったため、質問を投稿しました。CDIのみを使用して、パラメーター化されたコンストラクターを使用してクラスのインスタンスを注入する方法を理解しようとしています。私はSpringを使用していないので、Springでどのように実行するかは役に立ちません。これが私が作成したサンプルで、何が問題なのかを示しています。このシナリオでは、@Injectは機能しません。

    public class A 
    {
        public A(boolean deliverFromLocalWarehouse)
        {
            if(deliverFromLocalWarehouse)
            {
                wareHouseId = new Integer(10); 
            }
            else 
            {
                wareHouseId = new Integer(100);
            }
        }

        public void deliver()
        {
            //get wareHouse address by Id and initiate delivery.   
        }

        private Integer wareHouseId = null;
    }

    public class B 
    {

        @Inject
        private A a;
    }

ありがとうSrikrishnaKalavacharla

4

1 に答える 1

2

コンストラクターパラメーターがBeanから取得する必要がある場合は、単純に注釈を付けることができると思います。

public A(@Inject boolean localWarehouse) { ...

そしてそれを注入します

@Inject A a;

(コンストラクター引数が異なる)Aの2つの異なるインスタンスが必要な場合は、それらをサブクラス化できます。

public AForLocalWarehouse extends A {
    public AForLocalWarehouse() {
        super(true);
    }
}

そしてそれらを注入します

@Inject AForLocalWarehouse a;

または、修飾子を使用してプロデューサーメソッドを使用します。

@Produces @LocalWarehouse
public A localWarehouse() { return new A(true); }

@Produces @RemoteWarehouse
public A remoteWarehouse() { return new A(false); }

そしてそれらを注入します

@Inject @LocalWarehouse A a;
@Inject @RemoteWarehouse A a;
于 2012-08-06T20:38:11.687 に答える