国産DIコンテナSeasar その6
■ このスレッドは過去ログ倉庫に格納されています
0528デフォルトの名無しさん
2006/06/27(火) 12:21:01AOPといえばS2Container.NETのAOPも結構ひどいぞ
>pointcutを指定しない場合は、 コンポーネントが実装しているインターフェースのすべてのメソッドが対象になります。
とあるのに、実際にはObjectクラスのメソッドも対象になる
Seasar.DynamicProxyに関してはメソッドにvirtualを指定するとインターセプターが2回呼び出されるし
さらに下請けにprotected virtualなメソッドを使用するとそのメソッドもAOP対象になるし、もう訳わかめ
こんなコードで
namespace AOPTest1 {
public interface ICalc {int Add(int lhs, int rhs);}
public class Calc : ICalc {
public virtual int Add(int lhs, int rhs) {return DoAdd(lhs, rhs);}
protected virtual int DoAdd(int lhs, int rhs) {return lhs + rhs;}
}
}
diconファイルはこんな感じで
<component class="AOPTest1.Calc">
<aspect>traceInterceptor</aspect>
</component>
んでこれがAddメソッドを呼び出した時の実行結果 無茶苦茶過ぎるwww
BEGIN CProxyTypeAOPTest1CalcAOPTest10#Add(10,20)
BEGIN AOPTest1.Calc#Add(10, 20)
BEGIN AOPTest1.Calc#DoAdd(10, 20)
END AOPTest1.Calc#DoAdd(10, 20) : 30
END AOPTest1.Calc#Add(10, 20) : 30
END CProxyTypeAOPTest1CalcAOPTest10#Add(10, 20) : 30
■ このスレッドは過去ログ倉庫に格納されています