loveqq 框架新增 ApplicationScope,IOC 全量容器刷新也可保持单例
是什么?
ApplicationScope 作用域是什么?
ApplicationScope 是 loveqq-framework 新增的一种 bean 的作用域,它的作用是保证 IOC 容器全量刷新时,仍然能够保持单例。
loveqq-framework 已支持的作用域有:
单例:IOC 容器全量刷新时会重建,IOC 全量刷新即应用启动后,多次调用 ApplicationContext#refresh() 方法
原型:每次获取都是新的实例
线程:同一个线程内,是同一个实例,线程终结后自动销毁 bean
应用:即使 IOC 容器全量刷新,也保持同一个单例
为什么?
为什么需要 ApplicationScope?
因为 loveqq-framework 支持 IOC 容器的全量刷新,全量刷新时,所有 bean 都会销毁并重建。
基于这个机制,可以实现插件化开发,即通过 http 上传插件 jar 包,即可实时的加载新功能,可以点击参考这里
所有 bean,自然也包括一些重量级的 bean,比如 WebServer,虽然重新启动一个 WebServer 很快,但也会造成毫秒级别不可用的问题。因此设计了 ApplicationScope,标记 WebServer bean,从而保证真正的不停机热部署实时刷新。
不重建又想刷新怎么办?
还是以 WebServer 为例,当 IOC 全量刷新时,有可能新增控制器方法,此时如果不更新 WebServer 的话,直接访问会报 404,这怎么搞?
答案是:实现 ScopeRefreshed 接口,实现了该接口的 bean,当对应的作用域刷新时,将不会销毁重建,而是回调该接口,由开发者自己决定如何刷新!实际案例可以点击参考这里
感兴趣的同学可以看一下