2010-08-04 3 views
14

Ich habe eine Methode in einem komplexen Java-Programm, die aufgerufen werden muss, unmittelbar nachdem das Web ApplicationContext und SpringBeans initialisiert wurden.Aufruf einer Methode Nachdem alle SpringBeans und ApplicationContext initialisiert wurden

Ich habe versucht, Herumspielen mit <bean id="..." class="..." init-method="initialize"> aber diese Methode wird eine applicationContext.get().getBean(beanId); Methode aufrufen.

Ich fragte mich, ob jemand weiß, wie das geht.

Vielen Dank.

Antwort

2

Sie könnten eine benutzerdefinierte BeanFactoryPostProcessor hinzufügen, die Zugriff auf die betreffende Bohne hat.

+0

Hat * BeanFactoryPostProcessor ausführen nicht vor * alle Bohnen initialisiert wurden? – AJPerez

11

Ab Frühjahr 4.2 können Sie Ereignis-Listener mithilfe von Anmerkungen an Springs Lifecycle-Ereignisse (und Ihre eigenen) anhängen. Fügen Sie einfach den @EventListener einer Methode hinzu und fügen Sie den Ereignistyp als ersten (und einzigen) Parameter hinzu, und Spring erkennt es automatisch und verbindet es.

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

Einfacher als eine Bohne zu erstellen – Aakash

3

können Sie ApplicationListener<E> für diesen Zweck verwenden. Im generischen Typparameter könnten Sie ContextRefreshedEvent für Ihre Anforderung verwenden. Beachten Sie, dass Sie in der überschriebenen Methode onApplicationEvent alles tun können, um eine Bean zu autowire oder sie als Dienst zu verwenden oder von hier aus einen anderen Dienst aufzurufen. Und beachten Sie, dass, wie seine verschiedenen von @PostConstructor

public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> { 

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