どの場面で、どれを使うか
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の記述の仕方
こんな感じ