前言
今天去官网查看
spring boot资料时,在特性中看见了系统的事件及监听章节。想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了支持。比如,我们可以在用户注册成功后,发送一份注册成功的邮件至用户邮箱或者发送短信。使用事件其实最大作用,应该还是为了业务解耦,毕竟用户注册成功后,注册服务的事情就做完了,只需要发布一个用户注册成功的事件,让其他监听了此事件的业务系统去做剩下的事件就好了。对于事件发布者而言,不需要关心谁监听了该事件,以此来解耦业务。今天,我们就来讲讲spring boot中事件的使用和发布。当然了,也可以使用像guava的eventbus或者异步框架Reactor来处理此类业务需求的。本文仅仅谈论ApplicationEvent以及Listener的使用。
从官网文档中,我们可以知道,由于一些事件实在上下文为加载完触发的,所以无法使用注册
bean的方式来声明,文档中可以看出,可以通过SpringApplication.addListeners(…)或者SpringApplicationBuilder.listeners(…)来添加,或者添加META-INF/spring.factories文件z中添加监听类也是可以的,这样会自动加载。org.springframework.context.ApplicationListener=com.example.project.MyListener启动类中添加:
@SpringBootApplication public class Application { public static void main(String[] args){ SpringApplication app =new SpringApplication(Application.class); app.addListeners(new MyApplicationStartingEventListener());//加入自定义的监听类 app.run(args); } }所以在需要的时候,可以通过适当的监听以上事件,来完成一些业务操作。
自定义事件发布和监听
通过以上的介绍,我们来定义一个自定义事件的发布和监听。
0.加入POM依赖,这里为了演示加入了
web依赖。事件相关类都在spring-context包下。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>1.自定义事件源和实体。
MessageEntity.java
