とりあえず反応

アノテーションによる設定で、例えばDIでいえば、勝手にDIされるよりは@InjectってつけてDIされる方が望ましい。

出来ればどこからってのも書くのが望ましいと思う。

そこに足跡が残るから。ある意味アノテーションは保守する人へのメッセージとも言えるんじゃないかな。

続生産性の幻想 -生産性って言葉は適切じゃない-

激しく同意.

だから@InjectでインジェクトできるGuiceや@EJBEJBを,@Resourceで各種JNDIからのリソースを,@PersistenceContextでEntityManagerをインジェクトできるEJB3は大好き.(ちなみに@ResourceはJavaSEで定義されているので今後はさらに標準的に使われるだろう)

Seasar2は「autoBinding="none"」をつけないと勝手にやらかされるイメージがあって,意外と面倒だなぁと思うことが多い.おかげでなんでも「autoBinding="none"」をつけていたらこのようにはまってしまったりした.seasar2コンポーネントがオートバインディングで成り立っているということを知らなかったのですね.だってドキュメントにそうかかれていなかったし.どこでこの値わたしてるんだろーとかずっと思っていた.そして2.4ではたいしたことのない設定ファイルを作るのにも敷居が大幅に増えていた.SpringはたしかAutowiringはデフォルトでOFFだよね.

また,このオートバインディングJavaのプロパティ規約と相性が悪いようなきもする.seasar2はwebでのロジックの注入のみに集中しているからおそらくこんな問題は起きないと思うが,GuiceEJB3では明示的な注入なため非常にわかりやすく扱いやすい.特にGuiceはデフォルトの生成方法がプロトタイプであることもよりJavaSEに近く,プロバイダとあわせて「ある程度初期化がされたBeansをください」といったファクトリ的な使い方が非常にしやすい.また,「
injectMembers」メソッドのおかげでGuiceの管理下にないオブジェクトにも注入させやすいため注入するタイミングさえあればわりとどうにでもなりやすい.結果SwingのようなJavaJavaしたプログラムはGuiceが一番楽だった.

JavaってLLにくらべたら記述量は多いけど,その分他人のコードを非常においやすい用にできていると思う.Genericsにしてもそういう動きが非常に強いし,検査例外だってかなり特徴的だ.JavaSE7に搭載されるかもしれないJSR 308の「@NonNull」とかアノテーションによる見易さや保守性の高さ(Genericsの時点で大幅にアップしてるし,@NonNull以外はちょっとやりすぎが多いかも)もそうだろう.

とりあえずインターフェースを書いて実装と分離しなくとも外部から見えないようにできるprivateなフィールドインジェクション以外は淘汰されそうな気もする.

デザインパターンもいっぱいあるけど,一番まともに使われているのはJavaの基本であるテンプレートメソッドパターン以外にはファサードパターンだと思う.そしてこのファサードや委譲を利用したアダプタパターンはフィールドインジェクションが一番わかりやすい,