EJB3互換のDIコンテナ用アノテーションを考える

DIコンテナのアノテーションEJB3互換にできるようにすると、面白いことになることに気付きました。


前に書いた

Springの定義継承をうまく使うと、オブジェクトがどのグループに属するかという表現にもなります。例えば納品を扱う画面オブジェクト群・請求を扱う画面オブジェクト群がそれぞれ納品画面共通定義・製品画面共通定義を継承することになったりしますから。より静的保証するためにはインターフェイスとの併用が効きますね。

という話。
例えば



という定義をしておいて

@Spring(parent="納品")
class NohinListAction extends Action;

@Spring(parent="納品")
class NohinDao extends Dao;

@Spring(parent="請求")
class SeikyuListAction extends Action;

@Spring(parent="請求")
class SeikyuDao extends Dao;

という感じになります。
パッケージでの分類みたいなものにも見えますが、パッケージでの分類というのは、単に作業をやりやすくするための分類なので、あまり論理的な意味がもたせられないんです。アクセス制御のからみもあるので、どっちかというとクラスの分類を補足するための機能ですね。
で、こうしてみると、うまく縦軸と横軸のマトリックス構造を表現できていることがわかります。
この縦軸と横軸のイメージが性質の軸がクラスなら、所属の軸はなんになるの?のときに考えていた軸です。
このイメージを実現するために、Web+DB PRESS Vol.26の記事でわざわざXDT書いてまでparent属性をもってきたわけです。


で、本題のEJB3互換のアノテーションですよ。
EJB3アノテーションに@Statelessとか@Statefulとかあるわけですが、これを内部的に@Spring(parent="Stateless")や@Spring(parent="Stateful")と変換するわけです。
実際には、もうちょっと賢くやるんだけども。トランザクションを実現するためのtargetが指定できるようにするとか。
で、それぞれのBeanを定義しておく。



そうするとですね、ステートレスビーンやらステートフルビーンの動作がカスタマイズ可能なEJB3コンテナになるってわけなんですよ o(≧▽≦)ノ彡☆ドンドン
ステキス━━ヽ(゜∀゜)ノ━( ゜∀)ノ━(  ゜)ノ━ヽ(  )ノ━ヽ(゜  )━ヽ(∀゜ )ノ━ヽ(゜∀゜)ノ━━!!!




(´・ω・`)_日~~ オチツケ