准备
事件发布器
spring在refresh()函数中初始化了一个事件发布器
默认实现类是SimpleApplicationEventMulticaster
事件监听器
初始化完事件发布器后,就是寻找容器中的所有事件监听器了,同样在refresh函数
直接从容器中寻找ApplicationListener实现类,将这些监听器直接添加进时间发布器中
对外开放事件发布接口
关键接口ApplicationEventPublisher
当然,一般的spring容器都实现了这个接口
spring容器执行publishEvent函数,实际上就是委派给事件发布器去发布事件。
发布事件源码追踪
上文最后一张图可以直接追踪到事件发布器的multicastEvent函数
上图可以看到,我们还可以给事件发布器配置一个执行器,这里就不展开说了。
getApplicationListeners(event,type)返回指定类型(type)的监听器,此函数比较复杂,有机会再详细看看。
后面的invokeListener就可以追踪到调用了监听器的函数了
使用总结
1.自己实现一个ApplicationListener注入到容器(需标明监听什么事件)
2.自定义一个事件(ApplicationEvent即可),配合1来使用
3.通过获取spring容器,执行publishEvent,传入事件即可