handling framework eventlistener event contextrefreshedevent applicationeventpublisher and java spring listener applicationcontext

java - framework - spring events



Spring ApplicationListener no está recibiendo eventos (3)

Dado que no tiene beans cargando perezosos (según usted), es muy probable que utilice eventos por el motivo equivocado y, en su lugar, debería utilizar algo así como la interfaz InitializingBean :

public class MyBean implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { // ... } }

Del manual de Spring:

Para interactuar con la gestión del ciclo de vida del bean en el contenedor, puede implementar las interfaces Spring InitializingBean y DisposableBean. El contenedor llama a afterPropertiesSet () para el primero y destroy () para el segundo para permitir que el bean realice ciertas acciones luego de la inicialización y destrucción de sus beans. También puede lograr la misma integración con el contenedor sin asociar sus clases a las interfaces de Spring mediante el uso de métodos de arranque y destrucción de metadatos de definición de objetos de método.

Fuente: Spring Framework - Decisiones del ciclo de vida

Tengo el siguiente ApplicationListener:

package org.mycompany.listeners; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class MyApplicationListener implements ApplicationListener<ContextStartedEvent> { public MyApplicationListener() { super(); System.out.println("Application context listener is created!"); } /** * {@inheritDoc} */ public void onApplicationEvent(final ContextStartedEvent event) { System.out.println("Context ''" + event.getApplicationContext().getDisplayName() + "'' is started!"); } }

Y la siguiente definición de frijol:

<bean name="myApplicationListener" class="org.mycompany.listeners.MyApplicationListener" />

Puedo ver que Bean se crea cuando se imprime el mensaje del constructor, pero el evento de inicio de contexto nunca se recibe. ¿Qué me estoy perdiendo?


No estoy seguro de si esto ayuda, pero recuerdo vagamente tener un problema similar, que se solucionó mediante la carga previa y no la carga lenta. Aquí hay una descripción general rápida de ambos


ContextStartedEvent se publica cuando se invoca explícitamente ConfigurableApplicationContext.start() en el contexto. Si necesita un evento que se publica cuando se inicializa el contexto, use ContextRefreshedEvent .

Ver también: