2013-08-26 11 views
8

私はまだGuiceを新しくしています。以前はDIフレームワークを使用していませんでした。公式のwikiと他の多くの文書を読んだ後も、私はまだそれを完全に頭で覆うことができません。Guice - 静的ヘルパーメソッドを持つクラスへの依存関係を取り入れる

私の特別なケースでは、他の(注入される)クラスを使用するEL taglib関数を記述したいと思います。すべてのtaglib関数をstaticとして宣言しなければならないので、コンストラクタまたはsetterを介して@Iject私の依存関係にすることはできません。私はhttp://code.google.com/p/google-guice/wiki/Injections#Static_Injectionsで説明されているrequestStaticInjection()メソッドを使用することを考えましたが、動作させることができず、良いチュートリアルを見つけることができませんでした。任意の助けを事前に

おかげで、

アルマン

それはそのGuiceのドキュメントよりもはるかに明確に取得していませんが、ここであなたは、静的な注入を使用する方法の例を示してユニットテストだ
+2

「私はそれを動作させることができません」だから何を試しましたか? –

答えて

16

public class StaticInjectionExample { 

    static class SomeClass {} 

    static class TagLib{ 
    @Inject 
    static SomeClass injected; 

    public static void taglibFunction(String foo) { 
     injected.something(foo); 
    } 

    } 

    static class TestModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     requestStaticInjection(TabLib.class); 
    } 
    } 

    @Test 
    public void test() { 
    Injector injector = Guice.createInjector(new TestModule()); 
    TagLib receiver = injector.getInstance(TagLib.class); 
    // Do something with receiver.injected 
    } 
} 
+0

お返事ありがとうございます。私はあなたにそれを試してみます。 しかし、これは他のインジェクターによって注入されたうつ病を称えるものですか?たとえば、注入されたクラスが@Singletonとしてマークされている場合、Guiceは同じインスタンスを使用しますか? – Arman

+0

「他のインジェクター」が何を意味するか分かりません。 'Injected'を' @Singleton'とバインドすると、モジュール全体の注入(静的注入を含む)中にその単一のインスタンスが使用されます。 – condit

+0

Guiceのドキュメントによると、通常、GuiceServletContextListenerを拡張したServletContextListenerの内部でWebプロジェクト内にInjectorを作成します。だから、私がいくつかのクラスの中に追加のInjectorを作成すると、Guiceは "ServletContextListener-Injector"と同じ@Singletonクラスを注入しますか? – Arman

関連する問題