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>>() { }))); } }