轻量级 ioc/aop 框架 loveqq,支持 ioc 容器全量热刷新,可通过接口实现实时热更新类实现
全量刷新上下文代码示例:
package com.kfyty.demo; import com.kfyty.loveqq.framework.boot.K; import com.kfyty.loveqq.framework.boot.context.ContextRefresher; import com.kfyty.loveqq.framework.core.autoconfig.annotation.Autowired; import com.kfyty.loveqq.framework.core.autoconfig.annotation.BootApplication; import com.kfyty.loveqq.framework.core.autoconfig.annotation.Component; import com.kfyty.loveqq.framework.core.autoconfig.condition.annotation.ConditionalOnProperty; import com.kfyty.loveqq.framework.core.autoconfig.env.PropertyContext; import com.kfyty.loveqq.framework.core.utils.IOC; import com.kfyty.loveqq.framework.web.core.annotation.GetMapping; import com.kfyty.loveqq.framework.web.core.annotation.RestController; import com.kfyty.loveqq.framework.web.core.autoconfig.annotation.EnableWebMvc; import lombok.extern.slf4j.Slf4j; @Slf4j @EnableWebMvc @RestController @BootApplication public class Main { public static void main(String[] args) throws Exception { K.run(Main.class, args); } @Autowired private UserService userService; @Autowired private PropertyContext propertyContext; /** * 调用接口方法 */ @GetMapping public String sayHello() { return userService.hello(); } /** * 通过可刷新的配置属性切换 UserService 实现类 * * @param impl 条件配置属性 */ @GetMapping public String switchUserImpl(String impl) { // 设置可刷新的属性,刷新上下文时不会丢失 propertyContext.setRefreshProperty("user.service.impl", impl); // 全量刷新上下文,由于类已加载,刷新过程会很快 ContextRefresher.refresh(IOC.getApplicationContext()); // 刷新是异步的,这里返回页面提示 return "ok"; } /** * 接口定义 */ public interface UserService { String hello(); } /** * 扩展实现 */ @Component @ConditionalOnProperty(value = "user.service.impl", havingValue = "extension") public static class ExtensionUserService extends DefaultUserService { @Override public String hello() { return "internal"; } } /** * 默认实现 */ @Component @ConditionalOnProperty(value = "user.service.impl", havingValue = "default", matchIfMissing = true) public static class DefaultUserService implements UserService { @Override public String hello() { return "default"; } } }
上述代码启动 main 方法后:
- 先访问:http://localhost:8080/sayHello,将返回 default
- 然后访问:http://localhost:8080/switchUserImpl?impl=internal,此时将进行ioc容器的全量刷新
- 然后再访问:http://localhost:8080/sayHello,将返回 internal,原因是条件注解生效,实现类变化了!
从而实现了热更新类实现,这是 @RefreshScope 注解所无法实现的效果。
并且由于是热更新,所以ioc容器的刷新很快完成(ms 级别),相比重新启动耗时更短。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JTopCMS V4 更新:办公文档类型支持内容搜索
介绍 : 本次更新针对模型文件字段,文件集字段,以及附件中的文档类型附件开启深度内容搜索,对于docx, doc, xls, xlxs, ppt, wps ,pdf 等常见办公文档,可按照关键字搜索文档内容,从而丰富前端开发涉及的文库,文档库,在线杂志,在线报刊等业务的实用性,并提高后端管理员对文件内容的搜索定位能力。 开启文件搜索 文档搜索可被应用到前端与管理后台 系统特色 1. 基于 JAVA 标准自主研发,支持主流国产信创环境,国产数据库以及国产中间件。安全,稳定,经过多次政务与企事业单位项目长期检验,顺利通过各客户委托的第三方等保二,三级评测。并为用户提供涵盖 开发 部署 运维 各阶段的一对一远程服务。 2. 高效便捷的进行站点文档采编,审核,页面模板制作。具有性能优秀,稳定,安全,易扩展等特点,适合建设政府机构,教育部门以及企事业单位的站群系统,支持集群管理 系统支持集群化部署,可任意增加和较少 CMS 服务节点,根据业务需要独立部署服务节点,加强系统容错性 并发能力及扩展能力。 3. 站点支持静态化发布 内容静态化发布,不但支持生成 html,更可通过生成 sh...
- 下一篇
JxBrowser 7.43.2 版本发布啦!
#Chromium 137.0.7151.69 引入多项质量改进 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启