Classes Java que você só ouviu falar - javax.servlet.http.HttpSessionBindingListener
Nesse post continuo a abordar algumas classes Java que dificilmente você já utilizou. Nesse caso veremos a interface javax.servlet.http.HttpSessionBindingListener.
Essa interface quando implementada por uma classe e uma instância dessa classe é colocada na sessão, o método valueBound é invocado, notificando que o objeto foi adicionado à sessão. Quando o objeto é retirado da sessão (ou substituído) o método valueUnbound é invocado.
A grande diferença entre essa interface e os outros listeners, é que ela é implementada no próprio objeto, enquanto que os outros listeners são objetos externos notificados de eventos.
A seguir vemos um objeto que implementa o listener:
package br.com.amadei.blog.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class Person implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("Value bound: " + event);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("Value unbound: " + event);
}
}
Uma vez que esse objeto é colocado na sessão conforme código a seguir:
Person person = new Person();
session.setAttribute("person", person);
O seguinte é impresso no console, mostrando que nosso listener foi notificado:
Value bound: javax.servlet.http.HttpSessionBindingEvent[source=org.apache.catalina.session.StandardSessionFacade@1d38b87]
Quando o objeto é removido, temos o seguinte impresso:
Value unbound: javax.servlet.http.HttpSessionBindingEvent[source=org.apache.catalina.session.StandardSessionFacade@1d38b87]
Você deve ter reparado que não houve alteração no web.xml para registro do listener. Realmente, não é necessário nada além da implementação da interface para que o objeto seja notificado que ELE foi associado à sessão.
É isso. Agora cabe a você encontrar um caso de uso para aplicar essa funcionalidade.