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;
    }

谢谢斯里克里希纳卡拉瓦查拉

4

1 回答 1

2

如果构造函数参数应该来自一个bean,我想你可以简单地注释它:

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

并将其注入

@Inject A a;

如果您想要 A 的两个不同实例(具有不同的构造函数参数),您可以对它们进行子类化:

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 回答