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

24 阅读1分钟

是什么?

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,当对应的作用域刷新时,将不会销毁重建,而是回调该接口,由开发者自己决定如何刷新!实际案例可以点击参考这里

    感兴趣的同学可以gitee/github/gitcode 搜索 loveqq-framework 看一下