【Java】【DI】DIコンテナ ~ Google Guice編 ~

Google Guiceとは?

 * Googleが作ったDIコンテナ
 * DIに特化して、パフォーマンスを重視
 * 「ジュース」って呼ぶらしい
 * DIコンテナの設定を、XMLファイルではなく、Javaクラスで設定する(Eclipseのコードアシスト機能が活用できる)
 * DIを行う際に、注入するインスタンスは、Javaアノテーション機能を用いてインジェクションを行う

■ プログラミングの基本的な流れ

 [1] GuiceのModuleを定義する(サンプルだと「ModuleDemo.java」)
 [2] Injectorを作成して必要なインスタンスを作成してもらう(サンプルだと「Di.java」)

■ サンプル

 * Google Guice Version : Ver2.0
 * 開発環境 : Eclipse

準備

 * 「ダウンロード場所」で、Google Guiceをダウンロードする
 * 新規プロジェクトを立ち上げて、以下のJARを追加する
 [1] guice-2.0.jar
 [2] aopalliance.jar

実装

Main.java
import com.google.inject.Guice;
import com.google.inject.Injector;

public class Main {
	public static void main (String[] args) {
		Injector injector = Guice.createInjector(new ModuleDemo());		

		Bank bank = injector.getInstance(Di.class);
		
		String report = bank.getBalanceReport(1);
		System.out.println(report);
	}
}
ModuleDemo.java
import com.google.inject.AbstractModule;

public class ModuleDemo extends AbstractModule {
	@Override
	protected void configure() {
		bind(Dao.class).to(DaoImpl.class);
	}
}
Di.java
import com.google.inject.Inject;

public class Di {
	private final Dao dao;
	
	@Inject
	public Di (Dao dao) {
		this.dao = dao;
	}
	
	public String getString () {	
		String str = dao.getString();
		
		return String.format("取得した文字:%s\n", str);
	}
}
Dao.java
public interface Dao {
	public String getString ();
}
DaoImpl.java
public class DaoImpl implements Dao {
	public String getString () {
		return "DIサンプルです";
	}
}