La anotación @WebListener
en Spring Boot se utiliza para definir clases que escuchan eventos específicos en aplicaciones web, como la inicialización o destrucción del contexto de la aplicación (ServletContext
), la creación y destrucción de sesiones (HttpSession
), o el uso de atributos dentro del contexto o las sesiones. Esta funcionalidad es útil para realizar tareas como auditorías, control de sesiones o inicialización de recursos al arrancar una aplicación.
@WebListener
es parte de la especificación de Java EE (javax.servlet.annotation.WebListener
) y se utiliza para registrar listeners de servlets en aplicaciones Spring Boot. Aunque se suele emplear en aplicaciones Java EE tradicionales, en Spring Boot se pueden integrar estos listeners para complementar la gestión de eventos en aplicaciones web.
@WebListener
:
1. ServletContextListener
: Escucha eventos de inicialización y destrucción del contexto de la aplicación.
2. HttpSessionListener
: Escucha la creación y destrucción de sesiones HTTP.
3. ServletRequestListener
: Escucha el ciclo de vida de las solicitudes (request
) en la aplicación web.
Para que Spring Boot reconozca la clase anotada con @WebListener
, se debe usar el componente @ServletComponentScan
en la clase principal de la aplicación o configurar el listener de forma manual.
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MiContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Contexto de la aplicación inicializado.");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Contexto de la aplicación destruido.");
}
}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan // Habilita el escaneo de componentes como @WebListener
public class MiAplicacion {
public static void main(String[] args) {
SpringApplication.run(MiAplicacion.class, args);
}
}
1. Clase MiContextListener
:
ServletContextListener
y usa @WebListener
para indicar que debe escuchar los eventos de contexto de la aplicación.
contextInitialized
se ejecuta cuando el contexto se inicializa, mientras que contextDestroyed
se ejecuta al finalizar la aplicación.
2. Clase principal MiAplicacion
:
@ServletComponentScan
para escanear y registrar automáticamente las clases con @WebListener
, @WebFilter
y @WebServlet
.
Para más detalles, puedes consultar la documentación oficial de Spring.
Jorge García
Fullstack developer