loveqq 框架新增 ApplicationScope,IOC 全量容器刷新也可保持单例

是什么?
ApplicationScope 是什么?
ApplicationScope 是 loveqq-framework 框架最新引入的一种 Bean 作用域,其核心特性在于:即使在 IOC 容器进行全量刷新时,依然能维持 Bean 的单例性。
目前 loveqq-framework 支持的作用域包括:
-
单例(Singleton):默认作用域,但在每次调用
ApplicationContext#refresh()时会被销毁并重建 - 原型(Prototype):每次请求获取都会创建一个全新实例
- 线程(Thread):同一线程内共享同一实例,线程结束则自动清理
- 应用(ApplicationScope):跨刷新周期保持唯一实例,真正意义上的全局单例
为什么需要它?
随着框架对插件化开发的支持增强,IOC 容器的全量刷新功能变得尤为重要。通过调用 refresh() 方法,可以重新加载整个应用上下文,实现如热更新插件等动态能力——例如通过 HTTP 接口上传 JAR 包即可实时扩展功能。
然而,这种机制也带来了一个问题:所有 Bean 都将被销毁并重建。对于某些重量级组件(如 WebServer),虽然重启耗时较短,但仍可能导致短暂的服务不可用(毫秒级),影响“零停机”体验。
为此,ApplicationScope 应运而生。将其应用于关键 Bean(如 WebServer),可确保其在整个应用生命周期中始终唯一存在,从而实现真正的无中断热部署与动态刷新。
不重建如何同步变更?
如果 WebServer 实例不重建,但刷新后新增了 Controller 接口,那新路由无法注册,访问时会返回 404,该如何解决?
答案是:实现 ScopeRefreshed 接口。
当某个 Bean 实现了该接口,在其所处作用域刷新时,框架不会销毁和重建它,而是触发 onScopeRefreshed() 回调方法。开发者可在该方法中自定义刷新逻辑,比如重新扫描控制器、更新路由映射表等。
这样一来,既保留了原有实例,又完成了状态同步,完美兼顾稳定性与灵活性。具体使用示例可参考项目文档或源码中的实际案例。
感兴趣的同学欢迎查看源码了解更多细节:
源码地址:点击下载
<< 上一篇
下一篇 >>
网友留言(0 条)