[Seasar-user:7186] Re: [Seasar]Session スコープのコンポーネントの破棄

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 4月 11日 (水) 17:00:40 JST


小林 (koichik) です.

Date:    Wed, 11 Apr 2007 11:30:35 +0900
From:    原田 <[E-MAIL ADDRESS DELETED]>
To:       seasar-ML <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:7171] [Seasar]Session スコープのコンポーネントの破棄

> Sessionスコープのコンポーネントを要らなくなった段階で破棄したいのですが、
> できるのですか?

RemoveSessionInterceptor を使うことができます.
Java5 であれば S2-Tiger の提供するアノテーションを
使用して,

public class Foo {
  @RemoveSession("foo")
  public void foo() {
    ...
  }
}

とすることで,foo() メソッドが実行された後に
HttpSession から "foo" という名前の属性が削除
されます.
複数の属性をまとめて削除する場合は

@RemoveSession({"foo", "bar"})

のように名前を並べることができます.

J2SE1.4 では少し面倒で,dicon に
RemoveSessionInterceptor を登録する必要があります.

<component name="fooRemoveInterceptor"
    class="org.seasar.framework.aop.interceptors.RemoveSessionInterceptor">
  <property name="name">new String[] {"foo"}</property>
</componnet>

このインターセプタを任意のメソッドに適用することで,
そのメソッドが実行された後に HttpSession から
"foo" という名前の属性が削除されます.

インターセプタを適用するには dicon に直接書くか,
自動登録ならAspectAutoRegister,SMART deploy なら
AspectCustomizer で指定できるほか,
定数アノテーションで

public class Foo {
  public static final String ASPECT = "value=fooRemoveInterceptor, pointcut=foo";

  public void foo() {
    ...
  }
}

のように指定することもできます.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内