どの場面で、どれを使うか

http://homepage3.nifty.com/seasar/s2struts.html
のサンプルの例でいくと


・基本なにもしない楽パターン(Add)
 サービスをDIするだけの時
・上記以外のパターン
 上記+αで
 (1)コンポーネントのinstance属性をprototypeにして、インスタンス変数を使いたいとき
 (2)AOPを適用したい時(Actionから、DAOを直接たたいて、Actionのメソッドにトランザクションをかけたい時とか)
 (3)明示的な、DIが必要な時(Type4とか)
・diconにActionクラスを書くパターン(Multiply)
 上の、(1)〜(3)の時
 デメリット:struts-configとdiconに書いてあるActionのクラス名を同期する必要あり(リファクタリング時に面倒かも)
・ProxyActionパターン(Subtract)
 struts-configに、ProxyActionを書いて、パス名で、コンポーネントを検索するので、
 struts-configとdiconに書いてあるActionのクラス名を同期する必要なし(まあ、ドキュメントに書いてあるな。。。)
 デメリット:パスとコンポーネント名を同期する必要あり(パスの変更は、実際、ほとんど無いと思うけど)
・actionタグのtype属性を省略パターン(Divide)
 基本的に、Subtract(ProxyActionパターン)と同じ
 struts-configに、ProxyActionすら記述する必要がないので、記述量は減る
 ただし、Struts的には、間違ったstruts-configの記述の仕方


こんな感じ