memoっとくスマートフォン用の表示で見るmemoっとくこの広告は、90日以上更新していないブログに表示しています。GuiceGoogleのDIコンテナGuiceを試してみました。xmlを書かないでアノテーションでDIを解決している。Seasar2も自動登録でxmlを書かなくてよくなるけれど、あることはあるし書こうと思えば書けるが、Guiceはxmlは一切書かないみたいな感じ。見るの第4章にCSVの住所ファイルを読み込んで文字を加工してコンソールに出力するってプログラムがあって、ずいぶん昔にそのサンプルを試したプロジェクトが私のEclipseにあったので(本のサンプルと少し違うところがありますが同じことを実現してます)、そちらをGuiceで書き直してGuiceの動きを試してみました。サンプルのdiconファイルはこんな感じになっている。main()とAddressManagerImplのコードはこれコンテナにAddressManagerの実装をくれと要求すると、読み込むファイルのPATHがコンストラクタインジェクションされ、readerプロパティにAddressFileReaderImplが明示的にインジェクションされ、printerプロパティにはConsolePrinterが自動登録されたAddressManagerImplのオブジェクトが帰ってくるよね。guiceではxmlファイルの代わりにmoduleというインターフェイスを実装したクラスに実装を登録しておくって感じなので、早速MyModuleを作ってみる。{//mainで取得するクラスbinder.bind(AddressManager.class).to(AddressManagerImpl.class);//以下AddressManagerにDIされる実装binder.bind(AddressFileReader.class).to(AddressFileReaderImpl.class);binder.bind(AddressPrinter.class).to(ConsolePrinter.class).asEagerSingleton();binder.bind(String.class).toInstance("/address.csv");}}これでコンテナにそれぞれのインタフェースの実装(インタフェースの実装が2つ以上ある場合は?それは後で。これでいける)を登録できました。実際にDIされるようにAddressManagerImplをちょっとかえる。{this.printer.printTitle();}}インジジェクションしたいものに@Injectアノテーションをつけてあげればこれで見事さっき登録した実装がDIされます。メソッドでもコンストラクタでもフィールドでもいいみたい。メソッドはsetXXX()という名前でなくても問題ないようだ。基本的にはこれだけ変えてあげればこのサンプルに関しては問題なく動く。ちなみにコメントにした部分はサンプルではinitMethodで出力開始的文言をコンソール出力する処理を動かしているのですが、それはどうすればいいのか分からなかったので、printHead()ってメソッドを作って明示的に呼び出すように変えましたのです。実装2つとか登録できないのか?どうするんだってことなんですがStringで試してみました。example.MyModule.configure(MyModule.java:15).って怒られた。アノテーションを使って実現できるらしい。1実装ごとにアノテーションを作ります。{}それでこうやって登録しておく。binder.bind(String.class).annotatedWith(Cpath.class).toInstance("/address.csv");binder.bind(String.class).annotatedWith(Npath.class).toInstance("/work/address.csv");それでAddressManagerImplでDIする処理をこんなかんじにすると指定した実装がDIされました。〜以下略〜とりあえずこんな感じで少しずつやっていきます。webでも動かしてみたいと思います。2.0からProviderというものがアノテーションになっているみたいでその辺の違いも試してみたんですがもう少し整理できてからメモっとこうと思っております。Guiceをはじめて触ってみるTweet広告を非表示にする関連記事2012-10-01随分前にOracleの検証をJunit使ってテストした時の垂れ流しコードのメモを一応貼っとこうもしかしたら何かに使う可能性があるかもしれないから。それに...2010-06-21GAEのローカルでテストなどをやってみたりしておりますお家で陽気にプログラミングの時間です。Apiが隆盛しているのでしょうか以下、前に自分で確認したコードみたいなんだ。GAEのJDOって消...2009-10-03Extgwtとslim3gwtとりあえず、やってみるとこんな感じでつながる。»プロフィールid:kijitoranekoメガネないと見えない。(1)月別アーカイブはてなブログをはじめよう!kijitoranekoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。