Spring Boot 笔记之SpringApplication(二):Spring Boot事件


打印出source:有2个事件,一个是ContextRefreshedEvent、一个是PayloadApplicationEvent

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

可以看出来他们的事件源是同一个。

自定义事件:

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

输出了3个事件,包括自定义事件。

关闭事件:

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

又出来了一个事件。

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

可以通过泛型的方式对某一个事件进行监听。

 

Spring Boot事件

Spring事件

Spring内部发送事件

`ContextRefreshedEvent`

  • ApplicationContextEvent

    • ApplicationEvent

refresh()->finishRefresh()->publishEvent(new ContextRefreshEvent(this))

ContextClosedEvent

  • ApplicationContextEvent

    • ApplicationEvent

close()->doClose()->publishEvent(new ContextClosedEvent(this));

事件最终是由这些方法显示调用的。

Spring事件都是ApplicationEvent类型的。

自定义事件

PayloadApplicationEvent

Spring事件都是ApplicationEvent类型

发送Spring事件通过AbstractApplicationContext#multicastEvent(org.springframework.context.ApplicationEvent, org.springframework.core.ResolvableType)

Spring事件的类型ApplicationEvent

Spring事件监听器ApplicationListener

Spring事件广播器ApplicationEventMulticaster

  • 实现类SimpleApplicationEventMulticaster

     

Spring事件理解为消息

ApplicationEvent相当于消息内容

ApplicationListener相当于消息消费者、订阅者

ApplicationEventMulticaster相当于消息生产者、发布者

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

我们写一个简单的例子:

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

去官网看一下Spring事件到底是个什么东西。

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring  Boot事件监听示例

加一个简单的监听器:

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

这个地方跟视频中有差异,视频中没有结束进程,但是我自己写demo运行,结束进程了。后来我让朋友在他那边创建了个项目,把这个代码贴给他,他那边也没有结束进程。这个是怎么回事呢?

1.ApplicationStartingEvent

2.ApplicationEnvironmentPreparedEvent

3.ApplicationPreparedEvent

4.ContextRefreshedEvent

5.ApplicationStartedEvent

6.ApplicationReadyEvent

7.ContextClosedEvent

自己的demo运行结果是这7个,视频中是这7个,

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

由此可以推断出我的demo进程结束而视频中的没有,是因为jar包不一样导致的。

视频中示例加上close后,出现了8个:

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

Spring Boot 笔记之SpringApplication(二):Spring Boot事件

 

 

 

转载于:https://my.oschina.net/u/3944601/blog/3058025