Guice
GuiceコミッタのKevin Bourrillion氏による第2回。今回は中級編という事で、より実践的な内容になっています。 具体的にはInjectorやScopeの使い方や微妙な仕様(バグ)に関する突っ込んだ話、テスト方法、今後のバージョンアップについてなどです。 動画ペ…
GuiceコミッタであるKevin Bourrillion氏とBob Lee氏によるプレゼン動画とその資料が公開されました。 Java on Guice: Dependency Injection Java Way プレゼン資料(PDF) ↓動画を貼り付けてみました。 http://video.google.com/videoplay?docid=606844741087…
1回目に続き、Spring Java Configurationを試してみたいと思います。今回はAOP。ちなみに付属のドキュメントにはAOPの説明が無かったので(さすがM1リリース)、テストケースを参考に試してみます。 Spring Java ConfigurationでのAOP定義 injectするService…
今知ったのですが、Guice作ってるBob Leeさんはdynaopの作者だったんですね。Bitter EJBの著者の一人というのは知っていたのですが、こちらは知りませんでした。昔、当時在籍していた会社の勉強会でSwingのフレームワークを作ろうとしていて(参加者数人の構…
SpringFramework 2.0.4で、ちょうどベンチマークに関係する部分のパフォーマンスチューニングを行ったとの事なので(詳しくは次のエントリ参照)、再度ベンチマークを行いました。Seasar2も最新版に入れ替えた上で、セットアップ処理コードを一部変更してい…
先日行われたJapan Springframework User Groupの勉強会でGuiceについてライトニングトークした資料を公開しました(アップロードありがとうございます>岩永さん)。 ブログを読まれている方には新しい情報は無いと思いますが、よろしければどうぞ。 発表資…
Guiceと Springframeworkの最大の違いはDIやAOPの設定をJavaコードで書くかXMLで書くかですが、実は(?)SpringでもJava コードによる設定の記述手段が用意されています*1。今回はその"Spring Java Configuration"を簡単に見てみます。なお、まだマイルストー…
AOP用途の73%を占めるトランザクション管理*1。これが分かればとりあえずGuiceを使ってみようという人が増えるかもしれないので、ちょっと試してみます。 トランザクション機能は他ライブラリを使う Guiceはトランザクションに関する機能を一切持っていませ…
Springとの統合手段2つ目、SpringIntegration#fromSpringメソッドについてです。 fromSpring()メソッドのインタフェースは以下のようになっています。 /** Creates a provider which looks up objects from Spring using the given name. */ public static <T> </t>…
Guiceの開発者MLでは活発なやり取りが続いていて、どんどん新しい提案が生まれていたり、ポリシーが語られていたりしています。既に次のバージョン(1.1)のラベルもあるので、気になる方はこちら。実現するかどうかは分かりませんが、Seasar2のHOT deployと…
Spring統合の2回目の予定でしたが、前提としてProviderを理解していると良さそうだったので(というか、理解していないとAPIがよく分からなかったので)、予定を変更してProviderを見てみます。 Providerインタフェースは、Keyクラスと共にGuiceのDIの核とな…
GuiceはSpringと統合する為のクラスを用意しています。その名もずばりSpringIntegration。統合と言っても様々な形態が考えられると思いますが、現時点でGuiceが用意しているのは、Springのコンテナで管理されているBeanをGuiceから取得/injectできるようにす…
下記のWikiに公開しました。ソースの直接貼り付けは書き方が分からなかったので、添付ファイルになっています。 修正、追加、ブラッシュアップなど大歓迎です。 http://www.wikihouse.com/arumani/index.php?Guice%2C%20Sring%2C%20S2%20%A5%D1%A5%D5%A5%A9%…
いくつか手段があります。 アノテーションそのもので区別。 ex ) @JasracService / @ElicenseService アノテーションで指定する文字列で区別。 ex) @Named("JASRAC") / @Named("eLicense") 以下、それぞれ見ています。 アノテーションそのもので区別 どの実…
ちょっと数字を出す事の責任を感じてます…。 前置きさせて下さい。 ベースとなっているGuice付属のソースのJavaDocコメントには、以下の文で始まっています。"A semi-useless microbenchmark." 誤解を恐れつつ言えば、このマイクロベンチマークは「大豆100粒…
id:koichikさんに「S2も比較に追加して」というコメントを頂いたので、言われた通りの方法で追加して試しました。Seasar2のテストコードはま!さんのSeasar2用コードにkoichikさんの記述を追加しただけのものです。Seasar2は触った事がないのでシングルトンか…
すみません、以前のSpringとGuiceのAOPパフォーマンス比較ですが、テストコードに間違いがありまして、条件が同じになってませんでした。 Guiceは毎回エンハンスしたインスタンスを作っていた一方、Springは1つのProxyを使い回していたという…。数字を見て何…
Injectorはスレッドセーフだそうです。Injectorはインタフェースだから表現が若干不正確な気もするけど。
インタフェースの実装クラスを指定する方法は、その2で書いたbind(インタフェース).to(実装クラス);が基本です。しかし他にもいくつかあって、その中でもちょっと毛色が違う@ImplementedByアノテーションを紹介します。 これはインタフェースにアノテーショ…
※下記はコードが間違っていて訂正したので、その8をご参照下さい。 その5でid:shot6さんにコメントを頂いた事もあり、AOP使用時のパフォーマンスを比較してみます。使うのは、Guice付属のパフォーマンス比較コードにAOP設定とAOPを挟んだメソッドの呼び出し…
何ヶ月か前にGuiceを見た時AOPが見当たらなかったので「これじゃSpringの代替としては使えん」と思っていたのですが、AOPが使えるようになっています。または、当時見つけられなかった私にも見つけられるようになりました。その1で書いたように、GuiceのAOP…
Guiceのテストコードに含まれる、パフォーマンス比較測定を実行してみます。 内容は、以下のような依存関係を持たせたオブジェクトをひたすらコンテナから取得し続けて、1秒間に取得できた回数を表示するというものです。 Foo foo = new Foo(); foo.setI(5);…
その2で書いたコードでは、下記のようにフィールドに@Injectを宣言してInjectしてました。 @Inject private Service service; GuiceはもちろんメソッドやコンストラクタにもInject出来ます。 import sample.guice.service.Service; import com.google.inject…
一番単純なサンプルを、ユーザガイドから少し変えて書いてみます。あ、このドキュメントGoogle Docsだ。 構成は以下。 Service Injectするインタフェース ServiceImpl Injectするインタフェースの実装クラス Client ServiceがInjectされるクラス Main 起動ク…
以前同僚のM君より存在を教えてもらったGoogleのDIコンテナGuiceですが、めでたく1.0になったようなのでちょっと見てました。 一言で言うと、「アノテーションとジェネリクスを使い、パフォーマンスを重視し、DIに特化したDIコンテナ」のようです。とりあえ…