2007年5月29日火曜日

grails-wicket plugin を読む (1)

せっかくだから grails-wicket プラグインのソース・コードを読んでみる. たった40行くらいだし. ただし自分も修行中の身ゆえ, 間違いあればお許しのほどを.


grails-wicket プラグインのコードはここ. 本質的にはこの WicketGrailsPlugin.groovy だけ.



一行ずつ読んでいくことにする.



def version = 0.1



バージョンを指定している. これはプラグイン・パッケージを作る (% grails package-plugin) と自動的にパッケージ名 (grails-プラグイン名-バージョン.zip) に含まれる. そのほかにも他のプラグインへの依存性を書くときに使われる (後述). "0.1" とか "1.0" とか書くのが普通だろうけど, 文字列なら多分なんでもいい.



def dependsOn = [:]



このプラグインが依存している他のプラグインを書く. ここでは空だけど例えば [foo:0.1, bar:0.2] ってな感じ. 後ろの数字はバージョン.



def evicts = ['controllers']



このプラグインによって不要になった他のプラグインを記述する (evict とは立ち退き, 強制退去). ここでは組み込みの controllers プラグインが指定されているけど, なぜか依然として controller は使えるようだ... (もしかして evict が正しい?)



def doWithSpring = {

def applicationClass = application.allClasses.find { Application.class.isAssignableFrom(it) }



if(applicationClass) {

applicationBean(applicationClass)

}

}




doWithSpring では Spring Bean Builder を使って必要な bean を定義するのが普通. しかしここでは何をやっているのだろう? 中身を見てみるといきなり "application" という変数が出てくる. どこにも定義されていない. これはいったい何だ?



今までもいろいろ def したが, このクラスはスーパークラス (extends) があるわけでもインタフェース (implements) があるわけでもない. これらの def が必要なのはひとえに「規約」による. 標語としてはいわゆる「covention over configuration (設定より規約)」というやつだ (実際には config ではないので少し違うが). いずれにしろ, この規約を決めているやつがどこかにいるはずだ. それを探してみよう.



続く...