さてどうするか
深夜3時半にどうなったか?体臭が気になった。僕ももう27歳。深夜3時半ともなればお父さん的スメルを装備し始めてもおかしくない。お風呂に入りながら対策を練ろうということでWicket本片手に湯船につかりつつ、Google Guiceってその実何ぞ?という疑問を少しでも解決しようと思っていたのだが、読んでるうちに少し気になったというか、まぁ、問題ないよね。問題あっちゃ困るしね。問題ないよ。うんうん。気になるけどね。忘れようね。という文章が目に付いたのだった。デン。
これでwicket-guiceの仕様準備は整いました。GuiceComponentInjectorがWicketコンポーネントの生成を監視し、@Injectアノテーションを見つけると、オブジェクトを注入します。
あれ?僕の作ったカッチョイイUserクラス、Wicketコンポーネントと全然関係ないんだけど、これ、どうしたらいいの・・・?ん?あれ?うん。いや、大丈夫大丈夫!頑張れ日本!
Google Guiceとは!
で、Google Guiceとは結局なんなのか。なんでそんなものを使う予定なのか。理由は簡単で、なんか未来っぽいからである。未来、僕たちはこの地球を大切に生きていけるのだろうか。そんな疑問にこのグーグルガイズは答えてくれる。グーグルガイズは未来のクールガイ達だ。思い起こして欲しい。僕たちが目指した未来。それがグーグルガイズだ。大体でいうと、みんなが思う透明チューブの中をエアなんとかカーがビュンビュン走る世界がまさにそれだ。ぴたっとした服を着てビュンビュンしたい諸兄らはまず何はともあれグーグルガイズを使うことを検討して欲しい。他に副作用として、何故だかわからないがテストが簡単になったり、依存関係的なのが薄れて俺たちのクラスちゃんが一人立ちしていく感じになるとか色々あるらしいがあんまり気にする必要は無い。ちなみにグーグルジュースと読む。
で、何故テストが簡単になるのかという話ぐらいは理解しておかないと駄目だろうからしておくと、
class Ushi{ private Gohan gohan; private MoguMogu onakanonaka; public Ushi(){ this.gohan = new CaviarCan(); this.onakanonaka = this.gohan.akeru(); } }
みたいな意味不明なクラスがあったとして、キャビアの缶(CaviarCan)をちょっとnewして開けちゃうにはその前に伝説の鮫ハンターのおじいさんクラスから酒クラスを奪い取って楽しいお船クラスをプレゼントした後、娘クラスを人質にして、3時間以内に鮫クラスを手に入れてこないと色々CaviarCanクラス的には中身が空っぽになる問題があるよね。とか、ある場合、このUshiは現状でCaviarCanクラスの中身を用意してないから駄目で、そういったもろもろを作らないとテストできないとかUshiクラスの問題超えちゃってるじゃん。っていう場合がままあるっていうか、まさに今DB関係がそんな感じだから面倒だなぁって思ってるのだが、通常この場合、
class Ushi{ private Gohan gohan; private MoguMogu onakanonaka; public Ushi(){ gohanYoui(); this.onakanonaka = this.gohan.akeru(); } private gohanYoui(){ this.gohan = new CaviarCan(); } }
としておいて、Ushiさんを呼び出すときに
ikimono = new Ushi(){ private gohanYoui(){ this.gohan = new Namagomi(); } }
とかすると、鮫ハンターを探す必要がまったく無くなるっていう素敵な方法があって、でも、これ、なんか面倒だよね。今は簡単な内容だけなんだけど、gohanYoui()がそもそも超難解かもしれないしね。難解の時点で駄目なんだけど。
で、Guiceを使うと
class Ushi{ @Inject private Gohan gohan; private MoguMogu onakanonaka; public Ushi(){ this.onakanonaka = this.gohan.akeru(); } }
としたら、@Injectの下にあるやつに勝手にGuiceが良い感じのいろいろを詰め込んでくれるっていう機能なんだけど、自分で理解した内容を説明してみたらなんか正しいかどうか心配になってきた。どうしよう。