Google Guiceのアレコレ ―同一の戻り値を持ったプロバイダを定義する―

2.0からProviderの書き方がちょっとラクになったみたいだけど、そのへんはよくわからん。

登録側

package jp.co.hogehoge.provider;

import java.util.Arrays;
import java.util.List;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.name.Named;

public class SampleModule extends AbstractModule {
	public void configure() {
	}

	@Provides
	@Named("test")
	String proivdeString() {
		return "called by test";
	}

	@Provides
	@Named("test2")
	String proivdeString2() {
		return "called by test2";
	}

	@Provides
	List<String> proivdeStringList() {
		return Arrays.asList("a", "b");
	}
}

実行側

基本的に、annotatedWithで登録したのといっしょ。
Keyを使ってアノテーションを指定してやればOK.

package jp.co.hogehoge.provider;

import java.util.List;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;

public class Run {
	public static void main(String[] args) {
		Injector injector = Guice.createInjector(new SampleModule());
		System.out.println(injector.getInstance(Key.get(String.class, Names
				.named("test"))));
		System.out.println(injector.getInstance(Key.get(String.class, Names
				.named("test2"))));
		System.out.println(injector.getInstance(Key
				.get(new TypeLiteral<List<String>>() {
				})));
	}
}