2013-03-07 61 views
1

我有一個類春原型或供應商從Java EE

public class Test { 

    @Autowired 
    private Testing abc; 

    public Testing getTesting() { 
    return abc; 
    } 

} 

@Component 
@Scope(BeanDefinition.SCOPE_PROTOTYPE) 
public class Testing { 

    private int i; 
} 

每次我手動創建使用自動裝配能夠bean工廠類測試,我想到要創建測試的一個實例。

但是今天我被介紹給javax.inject.Provider

public class Test { 

    @Autowired 
    private Provider<Testing> abc; 

    public Testing getTesting() { 
    return abc.get(); 
    } 
} 



@Component 
@Scope(BeanDefinition.SCOPE_PROTOTYPE) 
public class Testing { 

    private int i; 

    //transactional methods 
} 

它提供了什麼好處的一個新的概念?

回答

2
  • 檢索多個實例。
  • 懶惰或可選檢索實例。
  • 打破循環依賴。
  • 抽象範圍,因此您可以在包含範圍內的實例中查找範圍較小的實例。

Java EE Documentation:Provider

UPDATE: Java EE Documentation: Inject Annotation討論如何在類循環依賴可使用Provider被打破。

保守噴射器可能檢測到在構建 時間循環依賴和產生誤差,在該點處程序員可以通過分別注入提供商或提供商 代替A或B的斷裂 的循環依賴關係。

+0

但是它真的有用,如果我將永遠需要一個實例?..即時通訊問作爲即時通訊與開發人員在這個話題上的談話,他試圖說服我提供者是更好的方法?上例中的區別。 – user1555190 2013-03-07 15:19:48

+0

已更新答案以包含可能對您有幫助的鏈接和說明。我不是這個主題的專家。所以不能評論具體情況。但看看目前的例子(並不複雜),似乎使用任何方法都是平等的。 – 2013-03-07 15:46:07