2012-08-06 78 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

相關問題