我是 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 method与 qualifiers :
@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/