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