[Seasar-user:8920] Re: [S2]Dxoを抽象クラスとして定義する方法

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 7月 4日 (水) 02:00:54 JST


小林 (koichik) です.

Date:    Tue, 03 Jul 2007 21:21:21 +0900
From:    中村 渉 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8917] [S2]Dxoを抽象クラスとして定義する方法

> ドキュメントには抽象クラスも可能とあったので
> 試してみたのですがAbstractMethodErrorが発生します。
> 
> public abstract class UserDxo {
> 	public abstract Map convert(UserDto user);
> }

S2 の AOP は,デフォルトではインタフェースに
定義されているメソッドにのみインターセプタが
適用されます.
上記クラスのようにインタフェースがない場合は
ポイントカットを明示的に指定する必要があります.
UserDxo を dicon に直接定義しているなら

<component class="UserDxo">
  <aspect pointcut="convert">dxoInterceptor</aspect>
</component>

SMART deploy なら customizer.dicon で

<component name="dxoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
    <component class="org.seasar.framework.container.customizer.AspectCustomizer">
      <property name="interceptorName">"dxo.interceptor"</property>
      <property name="pointcut">"convert"</property>
    </component>
  </initMethod>
</component>

としてください.

あるいは,

public interface UserDxo {
  Map convert(UserDto user);
}

public abstract class UserDxoImpl implements UserDxo {
}

のように,インタフェースと実装 (抽象) クラスに
分けてください.
SMART deploy の場合,実装クラスのパッケージは
<root>.dxo.impl または,<root>.web.<subapp>.impl に
してください.


-- 
<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 メーリングリストの案内