Field Injection

最新のSeasar(2.4)が対応した、プロパティインジェクションの拡張といえそうな機能。

"hogehoge"

と定義ファイルを記述しておくと、JavaBeans規約に準拠したアクセサが存在しなくても、同名のフィールドがあれば値を注入する。ここで考えるのは、同等の機能は.NETのDIコンテナでも必要だろうか、ということ。例えばS2Container.NETはプロパティインジェクションを素直に.NETのプロパティを使って実装しているので、然るべきプロパティを定義しておけば良いような気がする。

そもそもオブジェクト指向における、カプセル化の殻を壊してまでインジェクションするってことは余程のことだと思うけど、そこまでしてフィールドインジェクションが可能になっている理由はなんなのだろう。

追記:早速ひがさんからトラックバックと言及を頂いた。

DIのためだけに、setterメソッドを追加するのは、無駄な場合もあるためですね。DIコンテナしかそのプロパティの値を設定しないなら、Field Injectionはありだと思います。
[Field Injectionはなぜ必要なのか/ひがやすを blog]

なるほど、よくある特定のフレームワークに準拠するためだけにアクセサを追加する(インタフェースを変更する)、というフレームワークにありがちな問題を避けるという理由があったのね。納得。