ToStringInterceptorからスーパークラスのフィールドが見えない件
先日のエントリの件です。
http://d.hatena.ne.jp/wataka/20060817#1155794120
やはり勘違いがありました。
S2Containerから取得したインスタンスに対してのみ、アスペクトが適用されるんですね。
よく考えれば当たり前です。
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister"> <property name="interceptor">toStringInterceptor</property> <property name="pointcut">"toString"</property> <initMethod name="addClassPattern"> <arg>"hoge.dto"</arg> <arg>".*Dto"</arg> </initMethod> </component>
とした場合、hoge.dto.HodeDtoは(通常Request単位で)1つのオブジェクトがS2Containerに登録されます。
なので、以下のように生成・取得したオブジェクトにはアスペクトが適用されません。
- S2Dao経由で取得した複数のオブジェクト(List)
- HogeDto hogeDto = new HogeDto(); で生成した場合
というわけで、Dtoオブジェクトのフィールド値をトレースしたい場合は、toStringメソッドを自分で書くと。