spring中的事件监听eventListener

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring中的事件监听eventListener相关的知识,希望对你有一定的参考价值。

参考技术A title: spring中的事件监听eventListener
date: 2017-04-20 14:00:59
tags:
category: spring

官网说明: http://docs.spring.io/spring/docs/2.5.x/reference/beans.html#context-functionality-events

springboot新加入一些内建event:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-application-events-and-listeners

继承ApplicationEvent或相应子类。

4.2版本之后,不再强制要求继承ApplicationEvent,非ApplicationEvent子类的对象将被包装成PayloadApplicationEvent,其源码中的payload既我们传入的事件对象。

事件的发送者是实现了ApplicationEventPublisher接口的类。在spring中,其实就是你的ApplicationContext。

当你的bean实现ApplicationEventPublisherAware接口时,spring会自动为你注入ApplicationEventPublisher,也就是当前ApplicationContext。其实为了避免繁琐,直接注入即可。

调用applicationContext.publish(yourEvent);既成功发送。

同理事件的监听器,或者说处理者,既spring管理的bean中实现了ApplicationListener的相应类。根据事件的类型和对应listener接受的事件类型参数 ,被发送到相应的listener。

在spring4.2版中,允许在任一bean的对应方法上注解@EventListener来标记该bean实现了listener方法。实现更大程度的解耦。2种实现方式如下:

这里有个进阶使用方式是如果@EventListener标记的方法的返回值不是void,返回的对象将再次作为一个Event被发送。

同时@EventListener也可以和@Async配合使用,使此方法被包裹成任务放入线程池中异步执行。(前提是开启了异步任务池设置 @EnableAsync )

以上是关于spring中的事件监听eventListener的主要内容,如果未能解决你的问题,请参考以下文章

spring事件监听机制

springboot~ EventListener事件监听的使用

Spring-自定义事件发布

事件监听-EventListener

Spring Boot | 事件监听器异步处理事件,实现代码解耦

Spring标准事件和自定义事件-观察者模式