2017-11-13 3 views
0

ich ein benutzerdefiniertes Ereignis in Spring MVC zu veröffentlichen bin versucht, aber feuert nicht während Kontext wird geladen, unten sind die Code-Schnipsel,nicht in der Lage im Frühjahr benutzerdefinierte Ereignis zu veröffentlichen, bevor Kontext Last

Die onConnectionOpened wird aufgerufen, nachdem Verbindung zu einem Server, die nach Bean Initialisierung ausgelöst wird mit @PostConstruct

@Autowired 
private ApplicationEventPublisher publisher; 

public void onConnectionOpened(EventObject event) { 
    publisher.publishEvent(new StateEvent("ConnectionOpened", event)); 

} 

I Anmerkung an Hörer

@EventListener 
public void handleConnectionState(StateEvent event) { 
    System.out.println(event); 
} 
bin mit wie unten

Ich kann Ereignisse sehen, die ausgelöst werden, nachdem der Kontext geladen oder aktualisiert wurde. Wird erwartet, dass benutzerdefinierte Anwendungsereignisse nach dem Laden oder Aktualisieren des Kontexts veröffentlicht werden können?

Ich bin mit Frühling 4.3.10

Vielen Dank im Voraus

+0

Der '@ EventListener' wird verarbeitet, wenn der Kontext vollständig initialisiert ist. Wenn Sie Ereignisse sehr früh abfangen möchten (wenn Sie sie sogar veröffentlichen können), verwenden Sie einen 'ApplicationListener ' anstelle eines '@ EventListener'. –

+0

ApplicationListener arbeitet dank Deinum –

Antwort

0

Die @EventListener Anmerkungen vom EventListenerMethodProcessor verarbeitet werden, die so schnell laufen wie alle Bohnen instanziiert werden und fertig. Beim Veröffentlichen eines Ereignisses aus einer mit Annotationen versehenen Methode kann es vorkommen, dass zu diesem Zeitpunkt noch nicht alles ausgeführt wird und @EventListener basierte Methoden noch nicht erkannt wurden.

Stattdessen können Sie die ApplicationListener Schnittstelle verwenden, um die Ereignisse abzurufen und sie zu verarbeiten.

public class MyEventHandler implements ApplicationListener<StateEvent> { 

    public void onApplicationEvent(StateEvent event) { 
     System.out.println(event); 
    } 
}  
Verwandte Themen