Google GuiceのProviderによるInjection
factory系で生成したオブジェクトをDIしましょうという機能らしい。
やり方は2通りで、Providerを実装するか、@Providesインスタンスで指定するか。
ただのhogeを返すProvider.
public class SampleProvider implements Provider<String> { public String get() { return "hoge"; } }
こちらは、上の"hoge"を返すプロバイダーを"sample"という名前付きでStringにbindする例と、@Providesを利用して、"Checkout"という名前付きでbindする例。
@Providesを利用した場合は、メソッドの戻り値のクラスにbindする。
public class SampleProviderModule extends AbstractModule { @Override protected void configure() { bind(String.class).annotatedWith(Names.named("Sample")).toProvider(SampleProvider.class); } /** * Provider * * @return */ @Provides @Named("Checkout") public String provideJiji() { return "jiji"; } }
利用する側はいつもの通り。
@Inject @Named("Sample") String sample; @Inject @Named("Checkout") String jiji;