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