あるまに

モンスター・ラボでは現在エンジニアを募集しています。

2007-03-11 Google Guice

[] Google Guice(その2) 最も単純にInjectするサンプル

一番単純なサンプルを、ユーザガイドから少し変えて書いてみます。あ、このドキュメントGoogle Docsだ。

構成は以下。

Service
Injectするインタフェース
ServiceImpl
Injectするインタフェースの実装クラス
Client
ServiceがInjectされるクラス
Main
起動クラス

まずServiceとServiceImpl。

public interface Service {
	String getResponse(String msg);
}
public class ServiceImpl implements Service {
	public String getResponse(String msg) {
		return "Re: " + msg;
	}
}

当たり前ですが、POJOです。そしてServiceを呼び出すClient

import com.google.inject.Inject;

public class Client {
	@Inject
	private Service service;
	
	public void execute() {
		String response = service.getResponse("Hello");
		System.out.println(response);
	}
}

もう、どう見てもserviceをInjectする気満々ですね。「どこにInjectするか」は、アノテーション@Injectで指定するようです。

さて一番知りたいのは、何をするとこれがInjectされるのか。

public class Main {
	public static void main(String[] args) {
		Injector injector = Guice.createInjector(new MyModule());
		Client client = injector.getInstance(Client.class);
		client.execute();
	}
	
	static public class MyModule extends AbstractModule {
		@Override
		protected void configure() {
			bind(Service.class).to(ServiceImpl.class);
		}
	}
}

これだけでした。気になっていた部分は、

bind(Service.class).to(ServiceImpl.class);

で、今回の例では、bind(インタフェース).to(実装クラス) で「何をInjectするか」を設定しています。SpringだとXMLに<bean>定義を書くところですね。Injectorを作ってgetInstance()しているのは、SpringでApplicationContextを作ってgetBean()しているのと同じ感じですね。

という事で、実行するとめでたく

Re: Hello

と表示されました。

hassiehassie 2007/03/12 01:47 はっし〜〜です。
おお、さすがあるまにさん。もう、Guiceに手を出すとは・・・・。
使いどころが果たしてあるか結構興味津々です。
それから、金曜日の夜にお誘いした Google Group の件、下記のURLから好きなメアドで登録願います。
http://groups.google.com/group/x_tokyo/?msg=new&hl=ja

※ 松井さんも誘っていただけるとありがたいです。

arumaniarumani 2007/03/12 12:15 はっし〜〜さん、Groupのお誘いどうもです!楽しみです。
Guiceは、今のところ使いどころを探るというより、どんな風にできてるのかなーという興味でやっているので期待に応えられない可能性大です:-)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証