アノテーションでバインディング
サービスと実装の関連付けや、スコープの指定はアノテーションで行うこともできます。
サービスインターフェイス:
import com.google.inject.ImplementedBy; /** * サービスのインターフェイス */ @ImplementedBy(KittenImpl.class) // 実装がKittenImplであることを明示 interface Kitten { void meow (); }
サービスの実装:
import com.google.inject.Singleton; /** * サービスの実装 */ @Singleton // シングルトンであることを明示 class KittenImpl implements Kitten { public void meow () { System.out.println( "meow!" ); } }
利用者:
Injector injector = Guice.createInjector( new AbstractModule() { @Override protected void configure () {} // 何も指定しない }); // 実装を取得 Kitten s = injector.getInstance(Kitten.class); s.meow(); Kitten s2 = injector.getInstance(Kitten.class); System.out.println( s.equals( s2 ) ); // シングルトンであればtrue
出力:
meow! true