JSUG 第 2 回ライトニングトーク Google Guice モンスター・ラボ 稲村創( so.inamura@monstar-lab.com) 音楽配信サイト: http://monstar.fm ブログ: http:// d.haten...
Guice とは <ul><li>DI と AOP のフレームワーク(コンテナ) </li></ul><ul><li>読み:「ジュース」 </li></ul><ul><li>公開: 2007/3/8 (ver. 1.0) </li></ul><...
Guice の特徴 <ul><li>全て Java のコードとアノテーションで記述する </li></ul><ul><ul><li>タイプセーフ(ジェネリクス使いまくり) </li></ul></ul><ul><ul><li>リファクタリングに...
3ステップ DIサンプル <ul><li>1. Injectしたいところに @Inject を書く </li></ul>public class Client { @Inject private Service service; @Inject...
3ステップ DIサンプル <ul><li>2. Injectする型と実装クラスを指定する </li></ul>public class MyModule extends AbstractModule { protected void confi...
3ステップ DIサンプル <ul><li>3. コンテナからインスタンスを取得する </li></ul>public static void main(String[] args) { Injector injector = Guice.cre...
3ステップ AOPサンプル <ul><li>1. インターセプタを実装 </li></ul>// AOP Alliance のインタフェースを使ったインターセプタを実装 public class LoggingInterceptor  impl...
3ステップ AOPサンプル <ul><li>2. 適用する対象とインターセプタを指定 </li></ul>protected void configure() { bind(Service.class).to(ServiceImpl.class...
3ステップ AOPサンプル <ul><li>3. コンテナからインスタンスを取得する </li></ul>public static void main(String[] args) { Injector injector = Guice.cr...
Spring連携サンプル // Spring コンテナ作成 ApplicationContext context =  new ClassPathXmlApplicationContext(&quot;context.xml&quot;); I...
FAQ <ul><li>Q. Transaction 管理は可能? </li></ul><ul><li>Guice 自体には何も備えていない。 </li></ul><ul><li>  が、 AOP Alliance に準拠した既存のインターセプ...
FAQ <ul><li>Q. @Injectって書けないクラスにはinjectできない? </li></ul><ul><li>Providerという、ファクトリみたいなものを実装すればinject可能。 </li></ul><ul><li>  ...
リンク <ul><li>Guice ホーム </li></ul><ul><ul><li>http://code.google.com/p/google-guice/ </li></ul></ul><ul><li>ドキュメントの日本語訳 </li...
<ul><li>ご清聴ありがとうございました </li></ul>
Upcoming SlideShare
Loading in …5
×

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

5,013 views

Published on

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

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
5,013
On SlideShare
0
From Embeds
0
Number of Embeds
73
Actions
Shares
0
Downloads
0
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

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>

×