今日はgoogle guiceについて
googleが提供する軽量DIコンテナで、設定ファイルを使わないでDIを実現している。
設定ファイルを使わないなら何を使っているのというと、アノテーションを使用している。
だから、JAVAコードのみでDIを実現できるとうわけだ。
重装複雑なEJBコンテナに比べて、導入しやすくて、簡単にコードが組めるのが特徴だ。
アノテーションでDI指定するので、クラス単位、メソッド単位、フィールド単位にDI指定することができる。
インジェクションの範囲(スコープ)を簡単に設定することができるのだ。
インジェクション対象はインタフェースやクラスとなる。
例えば、以下ににみたいに指定する。
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
class guiceSample {
@Injection //ここが指定するアノテーション
private SayHello sayHello; //sayHelloにSayHelloクラスインスタンスを注入する!!
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override protected void configure() { //ここに注入対象と注入するクラスを指定。今回は不要// }
});
GuiceMain gm = injector.getInstance(GuiceMain.class);
gm.sayHello.say();
}
private SayHello sayHello; //sayHelloにSayHelloクラスインスタンスを注入する!!
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override protected void configure() { //ここに注入対象と注入するクラスを指定。今回は不要// }
});
GuiceMain gm = injector.getInstance(GuiceMain.class);
gm.sayHello.say();
}
}
上記の例では、injector.getInstanceで取得したGuiceMainクラスのオブジェクトフィールド”sayHello”に
SayHelloクラスインスタンスが注入されるということ。
例えばSayHello はこんなクラスだったら"hello hello"と出力される。
class SayHello {
say(){
System.out.println("hello hello");
}
}
これは一般的な使い方ではなく、あくまでもGoogle Guiceを勉強するための基礎でしかない。
次回は、インターフェースに注入する方法を学ぼうっと。
※コメント投稿者のブログIDはブログ作成者のみに通知されます