[Seasar-user:14651] Re: [Teeda]TraceInterceptorのカスタマイズ

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 6月 11日 (水) 19:30:19 JST


小林 (koichik) です.

Date:    Wed, 11 Jun 2008 18:18:32 +0900
From:    Tonomura-Akira <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:14647] [Teeda]TraceInterceptorのカスタマイズ

> costomizer.diconに以下のように記述しました。
> 
> <initMethod name="addAspectCustomizer" >
>   <arg>"appTraceInterceptor"</arg>
>   <arg>"(?!get).*"</arg>
> </initMethod>
> 
> 目的は達成できたのですが、
> ディフォルトのTraceInterceptorではトレース情報に出てこない
> toStringや、hashcodeメソッドまで出てくるようになってしまいました。
> 
> たぶん、親クラスのメソッドまで対象になってしまっていると思うのですが、
> ディフォルトのTraceInterceptorと同様にするには
> どうすれば良いのでしょうか?

TraceInterceptor も親クラスのメソッドは対象に
なります.
ともあれ (JW),

  <arg>"(?!get|equals|hashCode|toString).*"</arg>

のように '|' (縦棒) で区切って指定すれば equals 等を
除外できます.

あるいは,Interceptor の invoke() メソッドの中で

if (invocation.getMethod().getDeclaringClass() == Object.class) {
  return invocation.proceed();
}

とすれば Object で定義されたメソッドは対象外に
なります.
ただし,これだと toString() などをオーバーライド
している場合は対象になってしまいます.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内