Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Google Guice - JSUG第2回勉強会ライトニングトーク

JSUG第2回勉強会のライトニングトークで発表したGuiceについての発表資料です。発表と質疑応答1つで、12分くらいでした。
ダウンロードは↓からどうぞ。
http://springframework.jp/index.php?%B3%AB%BA%C5%CD%FA%CE%F2#bea4a4e0

  • Login to see the comments

Google Guice - JSUG第2回勉強会ライトニングトーク

  1. 1. JSUG 第 2 回ライトニングトーク Google Guice モンスター・ラボ 稲村創( so.inamura@monstar-lab.com) 音楽配信サイト: http://monstar.fm ブログ: http:// d.hatena.ne.jp/arumani /
  2. 2. Guice とは <ul><li>DI と AOP のフレームワーク(コンテナ) </li></ul><ul><li>読み:「ジュース」 </li></ul><ul><li>公開: 2007/3/8 (ver. 1.0) </li></ul><ul><li>作った人: Bob Lee 氏( Google の中の人)が中心 </li></ul>
  3. 3. Guice の特徴 <ul><li>全て Java のコードとアノテーションで記述する </li></ul><ul><ul><li>タイプセーフ(ジェネリクス使いまくり) </li></ul></ul><ul><ul><li>リファクタリングに強い </li></ul></ul><ul><ul><li>セットアップが速い </li></ul></ul><ul><li>実行速度が速い </li></ul><ul><ul><li>ひたすら DI するだけだと Spring の数十倍 (実際にどれだけ意味があるかはともかく) </li></ul></ul><ul><li>AOP Alliance に準拠 </li></ul><ul><ul><li>Spring 等の既存のインターセプタをそのまま使える </li></ul></ul><ul><li>Spring とも連携(共存)できる </li></ul><ul><ul><li>Guice から Spring で定義した Bean を呼び出せる </li></ul></ul>
  4. 4. 3ステップ DIサンプル <ul><li>1. Injectしたいところに @Inject を書く </li></ul>public class Client { @Inject private Service service; @Inject public Client(Service service) { this.service = service; } @Inject public void injectMethod(Service service) { this.service = service; } }
  5. 5. 3ステップ DIサンプル <ul><li>2. Injectする型と実装クラスを指定する </li></ul>public class MyModule extends AbstractModule { protected void configure() { // Service という型があったら、 ServiceImpl クラスを inject する bind( Service.class ).to( ServiceImpl.class ); } }
  6. 6. 3ステップ DIサンプル <ul><li>3. コンテナからインスタンスを取得する </li></ul>public static void main(String[] args) { Injector injector = Guice.createInjector(new MyModule()); Client client = injector.getInstance(Client.class); client.execute(); }  ⇒ DI 済インスタンス取得!
  7. 7. 3ステップ AOPサンプル <ul><li>1. インターセプタを実装 </li></ul>// AOP Alliance のインタフェースを使ったインターセプタを実装 public class LoggingInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation methodInvocation) throws Throwable { System.out.println(&quot;AOP から出力 &quot;); // 本来の処理を実行 return methodInvocation.proceed(); } }
  8. 8. 3ステップ AOPサンプル <ul><li>2. 適用する対象とインターセプタを指定 </li></ul>protected void configure() { bind(Service.class).to(ServiceImpl.class); bindInterceptor( // 対象クラス(この例はパッケージ一括指定) inPackage(Service.class.getPackage()) // 対象メソッド(この例は全メソッド指定) , any() // インターセプタ , new LoggingInterceptor()); }
  9. 9. 3ステップ AOPサンプル <ul><li>3. コンテナからインスタンスを取得する </li></ul>public static void main(String[] args) { Injector injector = Guice.createInjector(new MyModule()); Client client = injector.getInstance(Client.class); client.execute(); }  ⇒ weave 済インスタンス取得!
  10. 10. Spring連携サンプル // Spring コンテナ作成 ApplicationContext context = new ClassPathXmlApplicationContext(&quot;context.xml&quot;); Injector injector = Guice.createInjector(new AbstractModule() { protected void configure() { bind(BeanFactory.class).toInstance(context); // context.xml に // <bean id= “ foo ” class=“ FooImpl ” /> // と書いてあるとして bind( Foo.class ).toProvider(fromSpring( Foo.class, “foo&quot; ) ); } });
  11. 11. FAQ <ul><li>Q. Transaction 管理は可能? </li></ul><ul><li>Guice 自体には何も備えていない。 </li></ul><ul><li>  が、 AOP Alliance に準拠した既存のインターセプターを使えば良い。 </li></ul><ul><li>  例) Spring の TransactionInterceptor </li></ul>
  12. 12. FAQ <ul><li>Q. @Injectって書けないクラスにはinjectできない? </li></ul><ul><li>Providerという、ファクトリみたいなものを実装すればinject可能。 </li></ul><ul><li>  でもちょっと面倒で、今後のバージョンでもっと簡単になりそう。 </li></ul>
  13. 13. リンク <ul><li>Guice ホーム </li></ul><ul><ul><li>http://code.google.com/p/google-guice/ </li></ul></ul><ul><li>ドキュメントの日本語訳 </li></ul><ul><ul><li>http://www29.atwiki.jp/kronoswiki/pages/20.html </li></ul></ul><ul><li>私のブログもちょっと書いてます </li></ul><ul><ul><li>http:// d.hatena.ne.jp/arumani / </li></ul></ul>
  14. 14. <ul><li>ご清聴ありがとうございました </li></ul>

×