インジェクションのやり方いろいろ
Guiceでは以下のインジェクション方式がサポートされています。
import com.google.inject.Inject; class Mii { // フィールドインジェクション @Inject private String name; @Inject private int age; public void meow () { System.out.println( name + " : " + String.valueOf( age ) ); } }
import com.google.inject.Inject; class Kuro { String name; int age; // コンストラクタインジェクション @Inject private Kuro( String name, int age ) { this.name = name; this.age = age; } public void meow () { System.out.println( name + " : " + String.valueOf( age ) ); } }
セッターインジェクション(Shiro.java):
import com.google.inject.Inject; class Shiro { String name; int age; // セッターインジェクション @Inject private void setName( String name ) { this.name = name; } @Inject private void setAge( int age ) { this.age = age; } public void meow () { System.out.println( name + " : " + String.valueOf( age ) ); } }
class Tora { String name; int age; // 任意のメソッドインジェクション @Inject private String update( String name, int age ) { this.name = name; this.age = age; return "hogehoge"; } public void meow () { System.out.println( name + " : " + String.valueOf( age ) ); } }
メイン:
Injector injector = Guice.createInjector( new AbstractModule() { @Override protected void configure () { // toInstanceでインスタンスを直接登録できる。 bind( String.class ).toInstance( "名前はまだない" ); bind( Integer.TYPE ).toInstance( 2 ); } }); injector.getInstance(Mii.class).meow(); injector.getInstance(Kuro.class).meow(); injector.getInstance(Shiro.class).meow(); injector.getInstance(Tora.class).meow();
出力:
名前はまだない : 2 名前はまだない : 2 名前はまだない : 2 名前はまだない : 2
フィールドやコンストラクタはprivateでもOKです。(java.beansのAPIは使っていない様子。→InjectorImpl)