Spring ApplicationListener no está recibiendo eventos


Tengo la siguiente lista de aplicaciones:

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?

Author: Brian Tompsett - 汤莱恩, 2011-04-20

3 answers

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

Véase también:

 61
Author: axtavt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-10 08:59:14

Dado que no tiene frijoles cargados perezosos (según usted), lo más probable es que esté usando eventos por la razón equivocada y probablemente debería usar algo como InicializingBean interfaz en su lugar:

public class MyBean implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        // ...
    }

}

Del manual de la primavera:

Para interactuar con la gestión del contenedor del ciclo de vida del frijol, puede implementar el InicializingBean de la primavera y DisposableBean interfaz. El contenedor llama a afterPropertiesSet () para el y destruir () para el último para permitir que el frijol realice ciertas acciones sobre la inicialización y destrucción de sus frijoles. Puedes también lograr la misma integración con el contenedor sin acoplamiento sus clases a las interfaces de primavera a través del uso de init-método y destruir metadatos de definición de objeto de método.

Fuente: Spring Framework-callbacks del ciclo de vida

 7
Author: Michał Minicki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 14:17:45

No estoy seguro de si esto ayuda, pero recuerdo vagamente tener un problema similar, que se resolvió mediante la precarga y no la carga lenta. Aquí hay un resumen rápido de ambos

 0
Author: qwerty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-03 07:55:21