gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:22:30 25 4
gpt4 key购买 nike

我是 CDI 的新手,尝试搜索用法,找不到任何东西,所以发布了问题。我试图弄清楚如何仅使用 CDI 注入(inject)带有参数化构造函数的类的实例。我没有使用 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;
}

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

最佳答案

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

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

并注入(inject)

@Inject A a;

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

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

并注入(inject)它们

@Inject AForLocalWarehouse a;

或使用 producer methodqualifiers :

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

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

并注入(inject)它们

@Inject @LocalWarehouse A a;
@Inject @RemoteWarehouse A a;

关于dependency-injection - 如何使用 CDI 注入(inject)带有参数化构造函数的类的实例(仅限 Java EE 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com