はHttpSessionBindingListener
、ログイン ユーザーなど、インスタンスがセッションに格納される可能性があるクラスに実装されます。
例えば
public class ActiveUser implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
logins.add(this);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}
}
このインスタンスがActiveUser
によってセッション アトリビュートとして設定されるとHttpSession#setAttribute()
、valueBound()
が呼び出されます。HttpSession#removeAttribute()
またはセッションの無効化によって削除されるか、別の に置き換えられるとHttpSession#setAttribute()
、valueUnbound()
が呼び出されます。
実際の使用例を次に示します。
はHttpSessionAttributeListener
アプリケーション全体として実装され、で属性が追加、削除、または置換された@WebListener
ときに呼び出されます。上記の例を続けると、実装するクラスを変更できない場合(サードパーティなどの理由で)、または任意の数のクラスで「マーカー インターフェイス」を利用したい場合に特に便利です。リスニングの仕事を 1 か所で集中的に行うことができます。HttpSession
ActiveUser
ActiveUser
HttpSessionBindingListener
@WebListener
public class ActiveUserListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.remove(event.getValue());
}
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}
}
実際のユースケースは次のとおりです。