2015-02-06 103 views
1

當我通過依賴注入。基本基本(未注射時新的實例)

MyObject obj = new MyObject(); 

創建一個新的實例注射永遠不會發生。

爲MyObject的示例源可能是......

@Stateless 
public class MyObject{ 

    @Inject 
    Injection inj; 

    public MyObject() { 
    } 
    ... 
} 

不打針只是在注射對象的工作?當我明確創建一個新實例時,是否沒有使用注入的方法?

我想創建一個動態創建實例的類菜單(使用反射...反射不是問題...我嘗試使用new語法)。

我不想在我的菜單或主類中注入每個View類。

回答

2

注入只能在容器控制其生命週期的對象中起作用。如果您只是創建新對象,容器將如何知道對象已創建。

通常情況下,解決問題的方法是下列之一:

  • 不是自己創建的對象,但要問容器的對象。儘管在組合根外使用容器是一種應該避免的氣味。
  • 自己創建對象並手動注入依賴關係。這需要創建新對象的對象有權訪問它將在創建時創建的對象的所有依賴關係。這可能並不理想,所以你可以改爲將創建委託給工廠類。這個類取得了創建對象所需的所有依賴關係,而你當前正在「新建」這個對象的類只是對工廠有一個依賴關係。
0

您需要使用@Named對類進行註釋,以便它由IoC實例化,否則它將永遠不會看到@Inject。

+0

完全依賴於他正在使用的框架。 – 2015-02-06 15:30:40

+0

確實如此。例如,在某些框架中,您可以從xml(即applicationContext.xml)中看到該類,但仍需要使框架以某種方式瞭解該類,然後讓它實例化它,而不是使用new。 – Calabacin 2015-02-06 15:33:07