Spring Boot 笔记之SpringApplication(二):Spring Boot事件
打印出source:有2个事件,一个是ContextRefreshedEvent、一个是PayloadApplicationEvent
可以看出来他们的事件源是同一个。
自定义事件:
输出了3个事件,包括自定义事件。
关闭事件:
又出来了一个事件。
可以通过泛型的方式对某一个事件进行监听。
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事件到底是个什么东西。
Spring Boot事件监听示例
加一个简单的监听器:
这个地方跟视频中有差异,视频中没有结束进程,但是我自己写demo运行,结束进程了。后来我让朋友在他那边创建了个项目,把这个代码贴给他,他那边也没有结束进程。这个是怎么回事呢?
1.ApplicationStartingEvent
2.ApplicationEnvironmentPreparedEvent
3.ApplicationPreparedEvent
4.ContextRefreshedEvent
5.ApplicationStartedEvent
6.ApplicationReadyEvent
7.ContextClosedEvent
自己的demo运行结果是这7个,视频中是这7个,
由此可以推断出我的demo进程结束而视频中的没有,是因为jar包不一样导致的。
视频中示例加上close后,出现了8个:
转载于:https://my.oschina.net/u/3944601/blog/3058025