2012-08-06 85 views
1

我是CDI的新手,尝试搜索用法,找不到任何内容并发布问题。我想知道如何使用CDI注入具有参数化构造函数的类的实例。我没有使用Spring,所以在春天如何完成并没有帮助。这里是我创建的一个示例,以显示问题所在。我的@Inject在这种情况下不起作用。如何使用CDI注入具有参数化构造函数的类的实例(仅适用于Java EE 6)

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

回答

2

如果构造函数的参数应该来自一个bean,我觉得你可以简单地将其标注为:

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

,并注入其

@Inject A a; 

如果你想要两个不同的A实例(带有不同的constru构造函数参数),你可以继承他们:

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

@Inject AForLocalWarehouse a; 

注入,或用producer methodqualifiers

@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; 
它们注入
+0

谢谢s的回应。您建议对A级进行更改,以便可以注入它。问题仍然存在,我可以注入。更具体地说,在B类中,而不是@Inject private A a,它将如何改变?再次感谢您的帮助! – 2012-08-06 20:49:56

+0

我也添加了注射的例子。 – meriton 2012-08-06 20:56:29

+0

当我尝试最后一个选项时,它给了我错误“WELD-001408在注入点[[Field] @ LocalWarehouse @ Inject com.cdi.test.Ba]中带有限定符[@LocalWarehouse]的类型[A]的不满足依赖关系” – 2012-08-06 22:28:15

相关问题