Cuando se publica un evento en el ApplicationContext proporcionado por Spring y es detectado por el oyente, se ejecutará el método de procesamiento correspondiente.
Evento en sí mismo <Br /> El evento es una clase personalizada que necesita heredar ApplicationEvent proporcionada por Spring.
@Datapublic Class MyEvent extiende AplicationEvent {private String msg; public myEvent (fuente de objeto, string msg) {super (fuente); this.msg = msg; }} Evento de escucha
El método básico es implementar la interfaz ApplicationListener , personalizar un oyente, implementar onApplicationEvent() y luego agregarlo al ApplicationContext .
Por ejemplo:
La clase pública MyListener implementa ApplicationListener <MyEvent> {@Override public void onApplicationEvent (event myEvent) {System.out.print ("Speaking MyEvent Event"); }} ... // Agregue el oyente a la clase de inicio de Springboot public static void main (String [] args) {SpringApplication Application = New SpringApplication (MyApplication.Class); aplicación.AddListeners (new MyListener ()); Aplicación.run (args); } También puede usar Annotation @ EventListener (recomendado): el principio es crear un oyente escaneando esta anotación y agregarla a ApplicationContext .
@Componente @slf4jpublic class myEventHandler {@EventListener public Void HandleEvent (Event MyEvent) { log.info ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- Lanzamiento de eventos
Se puede publicar a través del método de publicación de objetos contextual ConfigurableApplicationContext::publishEvent() .
También puede implementar la interfaz ApplicationEventPublisherAware para publicar (recomendado).
@Componente@SLF4JPublic Eventservice implementa AplicationEventPublisheraAware {public ApplicationVentPublisher Publisher; @Override public void setApplicationEventPublisher (ApplicationEventPublisher ApplicationEventPublisher) {this.Publisher = ApplicationEventPublisher; } public String doEventWork (string msg) { log.info ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Publisher.PublishEvent (evento); Código de prueba
@Springboottest @runwith (SpringRunner.class) Public Class Eventservicetest {@aUtowired Servicio privado de eventos privados; @Test public void eventTest () {string msg = "código java"; servicio.DoEventWork (MSG); }} Aviso
Si hay una relación de herencia entre los dos eventos, el evento de subclase se escuchará primero, y luego se escuchará la clase principal después del procesamiento.
// myEvent2 extiende myevent@component@slf4jpublic class myEventHandler {@EventListener public void HandleEvent (evento myEvent) { log.info ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- log.info ("--------------------- Evento de procesamiento 2: {}", Event.getMsg ());Cuando publico un evento de subclase MyEvent2, el registro es el siguiente:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.