[Seasar-user:8125] Re: S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 20:30:21 JST
小林 (koichik) です.
Date: Wed, 06 Jun 2007 19:04:58 +0900
From: TAKEUCHI Hideyuki <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8119] Re: S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません
> InterceptorへのDIは、システムへのInterceptorの登録時に
> 行われ、HTTPリクエストの開始時にDIされるわけではないため
> 期待する動作はしないと思います。これはコンポーネントの
> ライフサイクルに関する問題なので、インスタンス管理を
> prototypeにしても解決はしないと思っています。
普通に
<component class="...">
<aspect>hogeInterceptor</aspect>
</component>
とやると,hogeInterceptor はコンテナの初期化時に
インスタンス化されるため,hogeInterceptor を
prototype にしても効果はありません.
しかし,hogeInterceptor を間接的に利用するように
することで回避できます.
その方法は S2 のバージョンによっていろいろあって,
以下にまとまっています.
http://www.seasar.org/wiki/index.php?FAQ%2FS2AOP#z685b23f
いずれの方法も,S2AOP によって組み込まれる
インターセプタが本当のインターセプタを
毎回ルックアップするようにしています.
そのため,インターセプタが prototype であれば
メソッドが呼び出される度にインスタンス化され,
request や session スコープのコンポーネントも
DI されるようになります.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内