轻量 ioc/aop 框架 loveqq 1.0.3 发布,响应式缓存,更强大的条件注解推断


本次更新:

  • 优化: loveqq-mvc,控制器全局异常切面实现从代理改为异常处理器,减少代理调用
  • 优化:loveqq-cache,新增响应式缓存支持,默认提供 ConcurrentHashMap 实现
  • 优化:loveqq-cache-redis,整合 redisson 响应式缓存支持
  • 优化:loveqq-boot-starter-netty,优化过滤器、拦截器均为响应式接口

响应式缓存示例:

下面的示例展示了缓存注解用法,并且实现了响应式/命令式一致的操作体验

@RestController
public class UserController {
@Autowired
private UserMapper userMapper;

@GetMapping
@Cacheable(value = "anyUser", ttl = 3)
public Mono<User> anyUser() {
return Mono.fromSupplier(() -> this.userMapper.listAll().get(0));
}

@GetMapping
@Cacheable("listAllUser")
public Flux<User> listAllUser() {
return Flux.fromStream(() -> this.userMapper.listAll().stream());
}

@GetMapping
@CacheClear(value = "listAllUser", condition = "retVal", preClearTimeout = 2000)
public Mono<Boolean> deleteAsync(Long id) {
return Mono.just(true);
}

@GetMapping
@Transactional
@Cacheable("listAllUserWithTransactional")
public List<User> listAllUserWithTransactional() {
return this.userMapper.listAll();
}

@GetMapping("delete")
@CacheClear(value = "listAllUserWithTransactional", condition = "retVal")
public boolean update(Long id) {
return true;
}
}

和 spring 的联系

        初期是以学习 spring 进行开发的,但是却并没有参考 spring 的实现,仅仅是把 spring 当做一个黑盒接口,根据 spring 的外在功能表现,使用自己的想法去实现功能,所以该框架,即不是模仿 spring,也不是 spring 的二开。而是一个全新的,但又高度符合 spring 开发者使用习惯的完整的 ioc/aop 框架

和 spring 的区别

        和 spring 最大的区别就是,loveqq 具有更强大的条件注解推断,因此不需要 @AutoConfigureBefore、@AutoConfigureAfter 等辅助自动配置的注解,仅仅需要正常配置 bean 即可,无需关心 bean 加载顺序的问题。

下面就是一个很好的例子:

@BootApplication
public class ConditionTest {
private boolean isOverride;

@Autowired(required = false)
private List<Inter> cons;

@Bean
public BB bbOverride() {
this.isOverride = true;
return new BB();
}

@EventListener
public void onComplete(ContextRefreshedEvent event) {
Assert.isTrue(this.isOverride);
Assert.isTrue(this.cons.size() == 5);
}

public static void main(String[] args) {
SpringApplication.run(ConditionTest.class, args);
}
}

interface Inter {}

@Component
@ConditionalOnBean({CC.class, BB.class})
@ConditionalOnClass(name = "com.kfyty.condition.ConditionTest")
class AA implements Inter {}

@Component
@ConditionalOnMissingBean(BB.class)
class BB implements Inter {}

@Component
@ConditionalOnBean(BB.class)
class CC implements Inter {

@Bean
@ConditionalOnBean(AA.class)
public EE ee() {
return new EE();
}
}

class DD implements Inter {}

@Component
@ConditionalOnMissingBean(DD.class)
class DDF implements FactoryBean<DD> {

@Override
public Class<?> getObjectType() {
return DD.class;
}

@Override
public DD getObject() {
return new DD();
}
}

class EE implements Inter {}
  • 上述代码,首先 BB 是无条件直接定义的,所以 BB 一定存在;
  • 而 CC 仅依赖 BB 存在,所以 CC 一定存在;
  • 而 AA 仅依赖 BB、CC 的存在,以及主类的存在,因此 AA 一定存在;
  • 而 EE 仅依赖 AA,因此 EE 一定存在;
  • 而我们没有直接定义 DD,因此 DDF 一定存在,而 DDF 属于 FactoryBean,它生产了 DD,所以 DD 一定存在;
  • 所以 AA、BB、CC、DD、EE 的条件都成立,cons.size () 应该是 5。
  • 而上述代码在 spring 下无法通过测试,但是在 loveqq-framework 中是可以测试通过的。

感兴趣的可以体验体验~


相關推薦

2024-05-09

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

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-12

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

2023-09-20

ng 生态这个巨人存在。但,真的有很多人是期待的:一个轻量的,更现代感的,最好还是国产的。 刚开始的确会很难;刚开始可能不如人家的完善;刚开始会有很多人质疑和漫骂。再难能有芯片难???不是说非要替换代别人

2023-07-09

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

2024-07-22

录补充 Label 形式的 traceId 和 spanId [优化] 优化 Micrometer 轻量升级链路追踪和度量模块,Zipkin 和 Prometheus 解决不同场景下的链路追踪拆不同模块依赖问题 [升级] 更新 Antisamy XSS 防护配置 [升级] 加强 Docker Compose 服务启动顺序控

2024-07-03

动态注册以及授权码模式 新增基于 Loki + Grafana 生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。 开放纯手写

2024-08-27

重大改动 增加 ruoyi-common-sse 模块 支持SSE推送 比ws更轻量更稳定的推送 增加 springboot snailjob 等 actuator 账号密码认证 杜绝内外网信息泄漏问题 增加 重构代码生成器 集成anyline开源框架 支持400+种数据库适配 依赖升

2024-08-23

动态注册以及授权码模式 新增基于 Loki + Grafana 生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。 开放纯手写

2024-08-27

重大改动 增加 ruoyi-common-sse 模块 支持SSE推送 比ws更轻量更稳定的推送 增加 springboot snailjob 等 actuator 账号密码认证 杜绝内外网信息泄漏问题 增加 重构代码生成器 集成anyline开源框架 支持400+种数据库适配 依赖升

2023-11-28

明 由于 springboot 2.X 与 vue 2.X 官方均宣布停止维护, 故而 框架 1.X 版本 进入维护状态(只处理问题不更新功能) 停止维护时间预计: 2024年6-10月具体根据使用人数动态决定, 此版本已经相当稳定 即便不更新功能也不影响使用 如果

2023-04-15

况下join条件丢失问题。  Mybatis-Milu是基于mybatis的超轻量ORM拓展框架,遵循JPA注解规范,让查询聚焦在实体与实体关系之中。

2024-07-10

ync 针对虚拟线程配置 与其他注意事项注释 update 优化 框架整体sql提高查询性能 update 优化 将p6spy配置文件统一放置到 common-mybatis 插件包内 update 优化 使用翻译注解简化用户查询 调整用户查询逻辑 新增功能 add 新

2022-08-15

Erupt  通用后台管理框架 Erupt 是一个低代码 全栈类 框架,它使用 Java 注解 动态构建页面,及增、删、改、查、权限控制等功能。 零前端代码、零 CURD、自动建表,仅需 一个类文件 + 简洁的注解配