[Seasar-user:10396] Re: Interceptor クラス内で Session= ?ISO-2022-JP?B?GyRCJTklMyE8JVckTiUzJXMlXSE8JU0lcyVIJHJFUE8/JDkkayRLGyh C?= は

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 9月 8日 (土) 02:00:17 JST


小林 (koichik) です.

Date:    Fri, 7 Sep 2007 17:34:27 +0900 (JST)
From:    [E-MAIL ADDRESS DELETED]
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10392]  Interceptor クラス内で Session=     ?ISO-2022-JP?B?GyRCJTklMyE8JVckTiUzJXMlXSE8JU0lcyVIJHJFUE8/JDkkayRLGyh C?= は

> [Seasar-user:5887]を参考にTeedaでログイン機能を実装しようとしています。認証
> 処理やログインユーザー情報取得などの実装はすべてAOPで行うようInterceptorクラ
> スの設計をしているのですが、その中で@Component(instance=InstanceType.SESSION
> ) したクラスをコンポーネント登録する方法がわかりません。S2Container#register
> ()でコンポーネント登録するとinstanceがsingletonになってしまいます。Intercept
> orクラスにてどのように記述すればInstanceType.SESSIONのコンポーネントとして登
> 録出来きPageクラスでコンポーネント取得が出来るでしょうか?

セッションスコープのコンポーネントを DTO にすれば
SMART deploy で自動登録されます.

package <root>.dto;

@Component(instance=InstanceType.SESSION)
public class LoginInfoDto {
  ..
}

としておいて,インターセプタは単に

package <root>.interceptor;

public class LoginInterceptor {
  public LoginInfoDto loginInfoDto;
  ...
}

あとは customizer.dicon で,

<component name="pageCustomizer"
  class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addAspectCustomizer">
    <arg>"loginInterceptor"</arg>
    <arg>"do.*, initialize, prerender"</arg>
    <arg>true</arg>
  </initMethod>
</component>

とするだけです.
Dto もインターセプタも明示的に登録する必要は
ありません.


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