Guiceを使ってみる - スコープ
Guiceから取得するインスタンスは、デフォルトでは「毎回作成」されます。シングルトンにするにはModuleで明示します。
インターフェイスと実装:
/** * サービスのインターフェイス */ static interface Cat {} /** * サービスのインターフェイス */ static interface Kitten extends Cat {} /** * サービスの実装 */ static class KittenImpl implements Kitten {}
サンプル:
Injector injector = Guice.createInjector( new Module() { public void configure ( Binder b ) { // スコープを指定しない。→毎回インスタンスが生成される b.bind( Kitten.class ).to( KittenImpl.class ); // スコープをシングルトンに。→同じインスタンスが返される。 b.bind( Cat.class ).to( KittenImpl.class ).in( Scopes.SINGLETON ); } }); Kitten s = injector.getInstance(Kitten.class); Kitten s2 = injector.getInstance(Kitten.class); System.out.println( s.equals( s2 ) ); // false Cat c = injector.getInstance(Cat.class); Cat c2 = injector.getInstance(Cat.class); System.out.println( c.equals( c2 ) ); // true
出力:
false true