[java] Guiceをちょこっと触ってみた。
2009/01/27
DI
google
java
対応はJava5以降、アノテーションを使ってます。
重要なアノテーションはずばり
@Inject
参考
シンプルだなと思いました。
以下、コード
package guice;
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Scopes;
public class TestA {
public static class MyModule implements Module {
public void configure(Binder binder) {
/*
* インターフェイスIContextの実装は、MyContextです。シングルトンで作成
*/
binder.bind(IContext.class).to(MyContext.class)
.in(Scopes.SINGLETON);
}
}
/*
* 実験メイン
*/
public static void main(String[] args) {
/*
* インジェクターを作成します。定義を記述したModuleを使う
*/
Injector injector = Guice.createInjector(new MyModule());
/*
* 注入して作成
*/
A a = injector.getInstance(A.class);
/*
* コンテクストが入ってるか出力してみる
*/
System.out.println(a.context);
}
/*
* インターフェイス
*/
interface IContext {
}
/*
* 実装です。
*/
static class MyContext implements IContext {
public String toString() {
return "my context...";
}
}
static class A {
IContext context;
// アノテーションを忘れずにないと注入されないよ。
@Inject
public void context(IContext context) {
this.context = context;
}
}
}
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Scopes;
public class TestA {
public static class MyModule implements Module {
public void configure(Binder binder) {
/*
* インターフェイスIContextの実装は、MyContextです。シングルトンで作成
*/
binder.bind(IContext.class).to(MyContext.class)
.in(Scopes.SINGLETON);
}
}
/*
* 実験メイン
*/
public static void main(String[] args) {
/*
* インジェクターを作成します。定義を記述したModuleを使う
*/
Injector injector = Guice.createInjector(new MyModule());
/*
* 注入して作成
*/
A a = injector.getInstance(A.class);
/*
* コンテクストが入ってるか出力してみる
*/
System.out.println(a.context);
}
/*
* インターフェイス
*/
interface IContext {
}
/*
* 実装です。
*/
static class MyContext implements IContext {
public String toString() {
return "my context...";
}
}
static class A {
IContext context;
// アノテーションを忘れずにないと注入されないよ。
@Inject
public void context(IContext context) {
this.context = context;
}
}
}
: