2010-08-04 10 views
14

Tengo un método en un complejo programa java que debe llamarse inmediatamente después de que se hayan inicializado ApplicationContext y SpringBeans.Llamando a un método Después de que todos los SpringBeans y ApplicationContext se hayan inicializado

He intentado jugando un poco con <bean id="..." class="..." init-method="initialize"> pero este método se llame a un método applicationContext.get().getBean(beanId);.

Me preguntaba si alguien sabe cómo hacer esto.

Gracias.

Respuesta

2

Puede agregar un BeanFactoryPostProcessor personalizado que tenga acceso al bean en cuestión.

+0

no BeanFactoryPostProcessor ejecutar * antes * de todos los granos han sido inicializado? – AJPerez

11

En Spring 4.2 en adelante, puede conectar detectores de eventos a los eventos de Springs Lifecycle (y los suyos) mediante anotaciones. Simple, agregue el @EventListener a un método e incluya el tipo de evento como el primer (y único) parámetro y Spring lo detectará automáticamente y lo conectará.

https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2

@Component 
public class MyListener { 

    @EventListener 
    public void handleContextRefresh(ContextRefreshedEvent event) { 
     ... 
    } 
} 
+0

Más fácil que crear un frijol – Aakash

3

Puede utilizar ApplicationListener<E> para este propósito. En el parámetro de tipo genérico puede usar ContextRefreshedEvent para su requerimiento. Y tenga en cuenta que, en el método reemplazado onApplicationEvent puede hacer algo como conectar un bean o usarlo como servicio o llamar a otro servicio desde aquí. Y tenga en cuenta que la forma diferente de su @PostConstructor

public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> { 

    @Override 
    public void onApplicationEvent(ContextRefreshedEvent event) { 
     //do what you want 
    } 
} 
Cuestiones relacionadas