2016-09-16 3 views
3

私はこの問題があります。Guice結合バインディング対@Providesメソッド

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

そして、それを実行し、その後、すべてのもの:Guiceのコンフィグはこのようになると

public class ABCImpl 
{  
    @Inject 
    private XYZ xyz; 
} 

public interface ABCInterface 
{ 
} 

とその実装:

は、私のようなクラス定義を持って考えてみましょううまく動作し、XYZが注入されます。

しかし、私はこのようなプロバイダのメソッドを使用する場合:次に

public class MasterConfig extends AbstractModule { 

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

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

を私が注入されたXYZを使用しようとすると、そのオブジェクトがnullのままなので、この場合には、私は、nullポインタ例外を取得します。私は疑問に思っています、これはbeacuseです、私はABCImplの新しいオブジェクトを返すので、Guiceは依存グラフを構築することができません。私がここに間違っていれば私を修正してください?

プロバイダメソッドを書く方法を誰でも提案できるので、configureメソッドで言及したときと同様に、すべてが正しく注入されます。

答えて

3

実際には、new ABCImpl()と書くと、Guiceは依存関係を注入する機会がありません。あなたはこれを行うことができます。

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

が、あなたのプロバイダの方法は、いくつかの余分なロジックを持っていない限り、あなたにもちょうど、その場合にはbind(ABCInterface.class).to(ABCImpl.class);を書くかもしれません。

+0

恐ろしい、感謝します:) –

関連する問題