我是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
答案 0 :(得分:2)
如果构造函数参数应该来自bean,我认为你可以简单地注释它:
public A(@Inject boolean localWarehouse) { ...
并注入
@Inject A a;
如果你想要两个不同的A实例(具有不同的构造函数参数),你可以将它们子类化:
public AForLocalWarehouse extends A {
public AForLocalWarehouse() {
super(true);
}
}
并注入
@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 @LocalWarehouse A a;
@Inject @RemoteWarehouse A a;