Seasar2.3RC1を触ってみる
コンポーネント自動登録、アスペクト一括登録すげー。楽。
クラス名の規約を守ってれば、勝手に登録できるのってホント楽。
アスペクトもいろんなかけかたを簡単に実現できるし。
使ってみようとしてちょっとはまった。
原因は単純なこと。自動登録を使うときは
public static void main(String[] args) { S2Container container = S2ContainerFactory.create(PATH); GreetingClient greetingClient = (GreetingClient) container.getComponent("greetingClient"); greetingClient.execute(); }
じゃなくて、
public static void main(String[] args) { S2Container container = S2ContainerFactory.create(PATH); container.init(); // 初期化!!!! GreetingClient greetingClient = (GreetingClient) container.getComponent("greetingClient"); greetingClient.execute(); }
みたいにS2Container#init()を呼ばないと自動登録が実行されませんでした。
ドキュメントの誤りでしょうか?
S2-Tigerも落としてみた。これってSeasar2.3RC1に追加することで機能する差分モジュールなんですね。最初これだけ落としてみて、ありゃ?これだけ?と思ってしまった。
で、使ってみた。
@Componentとか@Bindingはいまいち使いどころがわからない。
まあ、ファイルに分散しがちな設定をクラスそのものに定義することもできるというのはいいことだと思う。わけわからんくならない範囲であれば自由度が高いのは「善」ですね。
@Aspectは結構使い出がある。ここにアスペクト仕掛けたい!っていうのは実装上の都合でも結構あるし。トレースログとか。
今のところクラスにしか定義できないんだけど、これってメソッドにも指定できるようにならないでしょうかね。
@Aspect(interceptor = "aop.traceInterceptor") public void hoge() { //... }
みたいにpointcutを省略した形で直接かけると、便利になる気がする(消極的)。
[追記]
@AspectアノテーションはS2Daoと相性がいいと思う。
S2Daoは元々定数アノテーションでインタフェース自体に色々と情報を埋め込んでいる。そこに@Aspectアノテーションを追加して、そのインタフェース自体でS2Daoの利用クラスとしての設定を完結させる方がまとまりが良い。
更にtraceInterceptorをつけたい場合は、それはdiconファイルで設定したり。
Daoとしてのconcernとは微妙に外れる気がするので。