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に
という事で、実行するとめでたく
Re: Hello
と表示されました。