2016-09-16 46 views
3

我有這個問題。Guice鏈接綁定與@Provides方法

考慮我有類的定義,如:

public interface ABCInterface 
{ 
} 

及其實施:

public class ABCImpl 
{  
    @Inject 
    private XYZ xyz; 
} 

當吉斯配置是這樣的:

public class MasterConfig extends AbstractModule 
{  
    @Override 
    protected void configure() 
    { 
    // TODO Auto-generated method stub 
    bind(ABCInterface.class) 
    .to(ABCImpl.class); 
    } 
} 

並運行它,那麼一切工作正常,XYZ被注入。

但是當我使用供應商的方法是這樣的:

public class MasterConfig extends AbstractModule { 

    @Override 
    protected void configure() { 
     // TODO Auto-generated method stub 
    } 

    @Provides 
    public ABCInterface abc() { 
     return new ABCImpl(); 
    } 
} 

然後,在這種情況下,我得到一個空指針異常,當我嘗試使用注射XYZ,因爲這個對象保持爲空。我懷疑,這很有意思,我正在返回一個ABCImpl的新對象,因此Guice不能構建一個依賴關係圖。如果我在這裏錯了,請糾正我?

任何人都可以建議,如何編寫Provider方法,以便在配置方法中提到所有東西都可以正常注入。

回答

3

確實,當你編寫new ABCImpl()時,Guice沒有機會注入它的依賴關係。你可以這樣做:

@Provides 
ABCInterface abc(ABCImpl impl) { 
    return impl; 
} 

,但你可能也只是寫bind(ABCInterface.class).to(ABCImpl.class);在這種情況下,除非您的提供商方法有一些額外的邏輯。

+0

太棒了,謝謝:) –