2010-08-04 6 views
14

Ho un metodo in un programma java complesso che deve essere chiamato immediatamente dopo l'inizializzazione di ApplicationContext e SpringBeans web.Chiamare un metodo Dopo aver inizializzato tutti gli SpringBeans e ApplicationContext

Ho provato giocando in giro con <bean id="..." class="..." init-method="initialize"> ma questo metodo sarà chiamare un metodo applicationContext.get().getBean(beanId);.

Mi chiedevo se qualcuno sa come farlo.

Grazie.

risposta

2

È possibile aggiungere un numero personalizzato BeanFactoryPostProcessor che ha accesso al bean in questione.

+0

Non BeanFactoryPostProcessor eseguire * prima * tutti i fagioli sono stati inizializzati? – AJPerez

11

Nella versione Spring 4.2 in poi è possibile allegare i listener di eventi agli eventi del ciclo di vita di Springs (e ai propri) utilizzando le annotazioni. Semplice aggiungere @EventListener a un metodo e includere il tipo di evento come primo (e solo) parametro e Spring lo rileverà automaticamente e lo collegherà.

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

Più facile della creazione di un bean – Aakash

3

È possibile utilizzare ApplicationListener<E> per questo scopo. Nel parametro di tipo generico è possibile utilizzare ContextRefreshedEvent per il proprio requisito. E tieni presente che, nel metodo sottoposto a override onApplicationEvent puoi fare qualcosa come autowire a bean o usarlo come servizio o chiamare un altro servizio da qui. E notare che come la sua diversa da @PostConstructor

public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> { 

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