轻量级 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 级别),相比重新启动耗时更短。


相關推薦

2024-06-18

loveqq-framework 轻量级 ioc/aop 框架,比 spring 更强大的条件注解推断,打包后支持 jar index 启动。 本次更新: 正式更名为:loveqq-famework 新增:loveqq-boot-starter-mybatis 新增:loveqq-boot-starter-pagehelper 新增:loveqq-boot-starter-shiro

2024-07-26

ng 的外在功能表现,使用自己的想法去实现功能,所以该框架,即不是模仿 spring,也不是 spring 的二开。而是一个全新的,但又高度符合 spring 开发者使用习惯的完整的 ioc/aop 框架 和 spring 的区别         和 spring

2025-06-19

介绍 @Async:支持自动将普通方法转为异步调用 但是该功能有一个小问题,就是某些业务又需要同步调用时难以实现,特别是返回值为 void 时,这时候只能修改代码兼容两种逻辑 @Async.Await:该注解支持将异步调用自动转为同步

2024-05-09

​ kfyty-framework 轻量级 ioc/aop 框架,比 spring 更强大的条件注解推断,打包后支持 jar index 启动,启动速度更快 注解式 ioc/aop、自动装配、异步事件、动态代理、注解式 mvc(支持 Restful)、嵌入式 tomcat、 注解式 jdbc 框架、

2025-06-12

热加载starter启动器代码示例: 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.ann

2025-05-28

本次更新: 优化:loveqq-boot,事件监听器支持条件表达式 优化:loveqq-core,去除 cglib 代理,使用基于 javassist 的类代理 新增:loveqq-mvc,支持自动暴露公开方法为 post api,进一步减少重复代码 新增:loveqq-boot-starter-test,

2023-09-20

1、必须要有,不然就永远不会有 应用开发框架,虽然没有芯片、操作系统、数据库、编程语言这些重要。但是最终呈现在用户面前的,总是有软件部分。而软件系统开发,一般都需要应用开发框架,它是软件系统的基础性部件

2024-07-12

程式模板生成。但是又不想引入mybatis这种相对重量级的框架,而直接使用jdbc又比较繁琐,所以又编写了简单的可以基于注解执行SQL的简易版 mybatis,这便是 mybatis-demo。     后来,闲来无事,又想实现

2023-05-16

Guice 7.0.0 现已发布。Guice 是 Google 开发的轻量级依赖注入框架,目标是使开发和调试更容易,更快速。具体更新内容包括: 自 Guice 5.1.0 以来的变化 JEE Jakarta Transition Guice 7.0 仅支持jakarta.inject、jakarta.servlet和 jakarta.pe

2023-07-09

YMP 是一个非常简单、易用的轻量级 Java 应用开发框架,涵盖 AOP、IoC、WebMVC、ORM、Validation、Plugin、Serv、Cache 等特性,主要技术特点: 采用组件化、模块方式打包,可按需装配,灵活可扩展; 采用微内核实现 AutoScan、AOP、

2025-03-25

百度今日宣布,其国内首创的对话式应用开发平台“秒哒”已全面上线。该平台允许用户通过自然语言直接描述需求,系统即可自动生成具备完整功能的应用代码,标志着无代码开发工具领域的一大突破。 在秒哒的官方网页上

2023-03-30

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 经过多个版本的迭代,目前最新版本 v1.1.2 具有以下特性

2023-08-09

能力,借助此能力可针对不同页面设置不同的切换动效;轻量级ArkUI框架支持定义全局数据对象,可进行应用内页面间的数据共享。 全局API支持Stage模型多实例场景。 应用包管理 支持对应用分发类型和附件信息的设置

2024-08-02

,还大大提高了网站的性能和响应速度。 性能提升:轻量级的极致体验 HTMX 的核心库只有不到 10KB,而传统的前端框架可能动辄几十甚至上百KB。这不仅意味着更快的页面加载速度,还节省了用户的流量。对于移动端用户或