如何使用CDI注入带有参数化构造函数的类的实例(仅限Java EE 6)

时间:2012-08-06 20:28:41

标签: dependency-injection java-ee-6 cdi

我是CDI的新手,尝试搜索用法,找不到任何内容,因此发布了问题。我试图想象我如何只使用CDI注入一个带有参数化构造函数的类的实例。我没有使用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;
    }

由于 Srikrishna Kalavacharla

1 个答案:

答案 0 :(得分:2)

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

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

并注入

@Inject A a;

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

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

并注入

@Inject AForLocalWarehouse a;

或使用producer methodqualifiers

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