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;