2007-03-01から1ヶ月間の記事一覧

(その14)トランザクション管理

AOP用途の73%を占めるトランザクション管理*1。これが分かればとりあえずGuiceを使ってみようという人が増えるかもしれないので、ちょっと試してみます。 トランザクション機能は他ライブラリを使う Guiceはトランザクションに関する機能を一切持っていませ…

JSUG第2回勉強会でライトニングトークします

JSUG勉強会 第2回「Spring、RDBと出逢う」で、Guiceについてライトニングトークする事になりました。SpringとGuiceを組み合わせる内容がメインになると思います。 勉強会のテーマであるRDBとの連携は、まさに仕事の中心なのでとても楽しみです。懇親会も楽し…

(その13) Springframeworkとの統合(2) Spring管理のBeanをGuiceに個別登録

Springとの統合手段2つ目、SpringIntegration#fromSpringメソッドについてです。 fromSpring()メソッドのインタフェースは以下のようになっています。 /** Creates a provider which looks up objects from Spring using the given name. */ public static <T> </t>…

MLとissueが結構楽しいです

Guiceの開発者MLでは活発なやり取りが続いていて、どんどん新しい提案が生まれていたり、ポリシーが語られていたりしています。既に次のバージョン(1.1)のラベルもあるので、気になる方はこちら。実現するかどうかは分かりませんが、Seasar2のHOT deployと…

(その12) Providerについて

Spring統合の2回目の予定でしたが、前提としてProviderを理解していると良さそうだったので(というか、理解していないとAPIがよく分からなかったので)、予定を変更してProviderを見てみます。 Providerインタフェースは、Keyクラスと共にGuiceのDIの核とな…

(その11) Springframeworkとの統合(1) Spring管理のBeanをGuiceに一括登録

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%…

(その10) 同じ型で異なる実装クラスをinjectしたい場合

いくつか手段があります。 アノテーションそのもので区別。 ex ) @JasracService / @ElicenseService アノテーションで指定する文字列で区別。 ex) @Named("JASRAC") / @Named("eLicense") 以下、それぞれ見ています。 アノテーションそのもので区別 どの実…

(その9)AOP含めたパフォーマンス比較を再度

ちょっと数字を出す事の責任を感じてます…。 前置きさせて下さい。 ベースとなっているGuice付属のソースのJavaDocコメントには、以下の文で始まっています。"A semi-useless microbenchmark." 誤解を恐れつつ言えば、このマイクロベンチマークは「大豆100粒…

(その8) Seasar2をAOPパフォーマンス比較対象に追加

id:koichikさんに「S2も比較に追加して」というコメントを頂いたので、言われた通りの方法で追加して試しました。Seasar2のテストコードはま!さんのSeasar2用コードにkoichikさんの記述を追加しただけのものです。Seasar2は触った事がないのでシングルトンか…

訂正:AOPパフォーマンス比較

すみません、以前のSpringとGuiceのAOPパフォーマンス比較ですが、テストコードに間違いがありまして、条件が同じになってませんでした。 Guiceは毎回エンハンスしたインスタンスを作っていた一方、Springは1つのProxyを使い回していたという…。数字を見て何…

TSSを久々に見ました

crazybob、Guice構想の瞬間? http://www.theserverside.com/news/thread.tss?thread_id=38767#198889 ↓ http://www.theserverside.com/news/thread.tss?thread_id=38767#199028 Rod Johnson氏、痛恨のミス http://www.theserverside.com/news/thread.tss?th…

番外編。スレッドセーフ

Injectorはスレッドセーフだそうです。Injectorはインタフェースだから表現が若干不正確な気もするけど。

Google Guice(その7) 実装クラスの指定方法

インタフェースの実装クラスを指定する方法は、その2で書いたbind(インタフェース).to(実装クラス);が基本です。しかし他にもいくつかあって、その中でもちょっと毛色が違う@ImplementedByアノテーションを紹介します。 これはインタフェースにアノテーショ…

Google Guice(その6) AOP使用時のパフォーマンス比較

※下記はコードが間違っていて訂正したので、その8をご参照下さい。 その5でid:shot6さんにコメントを頂いた事もあり、AOP使用時のパフォーマンスを比較してみます。使うのは、Guice付属のパフォーマンス比較コードにAOP設定とAOPを挟んだメソッドの呼び出し…

Google Guice(その3) AOP

何ヶ月か前にGuiceを見た時AOPが見当たらなかったので「これじゃSpringの代替としては使えん」と思っていたのですが、AOPが使えるようになっています。または、当時見つけられなかった私にも見つけられるようになりました。その1で書いたように、GuiceのAOP…

Google Guice(その5) パフォーマンス比較

Guiceのテストコードに含まれる、パフォーマンス比較測定を実行してみます。 内容は、以下のような依存関係を持たせたオブジェクトをひたすらコンテナから取得し続けて、1秒間に取得できた回数を表示するというものです。 Foo foo = new Foo(); foo.setI(5);…

Google Guice(その4) メソッドやコンストラクタへのInject指定

その2で書いたコードでは、下記のようにフィールドに@Injectを宣言してInjectしてました。 @Inject private Service service; GuiceはもちろんメソッドやコンストラクタにもInject出来ます。 import sample.guice.service.Service; import com.google.inject…

ところで

特にDIのパフォーマンスで困っている訳でも、XML定義が大きすぎて困っている訳でもない私がGuiceにちょっと興味を持っているのは、ソース見たらジェネリクスがすごい事になっていたからです。正直、最初見た時ソースの文法が一部理解できなくて「ジェネリク…

Google Guice(その2) 最も単純にInjectするサンプル

一番単純なサンプルを、ユーザガイドから少し変えて書いてみます。あ、このドキュメントGoogle Docsだ。 構成は以下。 Service Injectするインタフェース ServiceImpl Injectするインタフェースの実装クラス Client ServiceがInjectされるクラス Main 起動ク…

Google Guice(その1) 概要

以前同僚のM君より存在を教えてもらったGoogleのDIコンテナGuiceですが、めでたく1.0になったようなのでちょっと見てました。 一言で言うと、「アノテーションとジェネリクスを使い、パフォーマンスを重視し、DIに特化したDIコンテナ」のようです。とりあえ…