Swingアプリ向けDIコンテナアプローチ

Javaなので今回こそSeasar2、とも思ったのだが、C#ではせっかく自分で書いたので(といってもかなりのインタフェースはSeasar2と同じなのだが)Javaでも自分で書くことにした。

設計自体はC#で書いたものと同じなのだが、改めて要件を列挙することにする。

  • 設定用XMLの構造は独自とし、ローカルのDTDで管理(スキーマは使わない)
  • JSR 296: Swing Application Frameworkのようにプロパティファイルからのインジェクションを可能とする
  • AOPはできるだけ使わない(JavaのDynamicProxyでカバーする)
  • コンストラクタ、メソッド(プロパティ)からのインジェクションのみ実装
  • 自動ワイヤリングタイプのインジェクションはデメリットも多いので省略
  • 遅延生成をデフォルトとし、アプリケーションの起動を妨げない
  • 式評価はJ2SE6で導入されたJavascriptEngine(Rhino)、又は後述するJSR295で使用するEL式により実装する

こんなところか。あと、DIとは直接関係しないがその周辺として

  • ActionMapやInputMap等、Swingの資産はできるだけ生かす
  • JSR 295: Beans Bindingを使ってDTOの箱詰めを自動化する
  • DxOC#同様に具象クラスとして用意する
  • 3層前提なのでDAOは後回し

この辺も必須。