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