モンスター・ラボでは現在エンジニアを募集しています。
2007-03-11 Google Guice
■[Guice] Google Guice(その2) 最も単純にInjectするサンプル
一番単純なサンプルを、ユーザガイドから少し変えて書いてみます。あ、このドキュメントGoogle Docsだ。
構成は以下。
まず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
と表示されました。
トラックバック - http://d.hatena.ne.jp/arumani/20070311/1173626849
