场景
项目要求使用springboot的ioc来管理bean,其他的业务逻辑自己现实。其中有一项需求是所有bean都初始化完成后,执行公司的初始化流程
原理
各种配置和初始化后通过事件调用下对应的事件处理函数
解决方案
基础知识
ApplicationContext事件机制是观察者设计模式的实现。Spring 的事件处理是单线程的,所以如果一个事件被发布,直至并且除非所有的接收者得到的该消息,该进程被阻塞并且流程将不会继续。因此,如果事件处理被使用,在设计应用程序时应注意。
Spring中有一些内置的容器事件(ApplicationContextEvent)如下:
ContextRefresheEvent:
ApplicationContext容器初始化或刷新时触发该事件。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用
ContextStartedEvent:
当spring启动时,或者说是context调用start()方法时,会触发此事件
ContextStoppedEvent:
当spring停止时,或者说context调用stop()方法时,会触发此事件
ContextClosedEvent:
当spring关闭时,或者说context调用close()方法时,会触发此事件
实践
通过实现ApplicationListener接口,重写onApplicationEvent方法,接管ContextRefresheEvent