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



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

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

如果构造函数参数应该来自 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;

相关内容

最新更新