轻量 ioc/aop 框架 kfyty-framework,比 spring 更强大的条件推断
kfyty-framework 轻量级 ioc/aop 框架,比 spring 更强大的条件注解推断,打包后支持 jar index 启动,启动速度更快
注解式 ioc/aop、自动装配、异步事件、动态代理、注解式 mvc(支持 Restful)、嵌入式 tomcat、 注解式 jdbc 框架、javafx mvvm 框架,并基于此开发了一套支持 java/enjoy/freemarker/jsp 模板的代码生成器。
kfyty-core
项目核心,包含一些通用工具类、jar index 启动引导、泛型推断工具、jdbc 访问工具、bean 封装工具、包读取工具、json 转换工具以及自动配置接口、自动配置注解等
kfyty-database
数据库访问工具,基于代理实现了接口式 jdbc 访问,支持注解编写 SQL 或者基于模板引擎(如:enjoy/freemarker) 的动态 SQL; 内置代码生成器和默认生成模板,支持 java 编程模板、enjoy/freemarker 模板以及 jsp 模板(需要 k-jte 支持),或者自定义模板引擎。
kfyty-mvc
注解式 mvc,支持嵌入式 tomcat、复杂参数自动转换绑定、 restful/ant 风格路径匹配、全局异常处理、请求拦截器等。
kfyty-aop
AOP 模块,支持 ant 路径匹配、支持注解类型匹配、集成 AspectJ,可以单独使用,也可以集成到 kfyty-boot 自动配置。
kfyty-sdk
用于快速封装 sdk,只需编写请求及响应模型,支持拦截器,易于拓展,支持命令式、响应式风格
kfyty-javafx
javafx mvvm 框架,实现了视图和数据模型的双向绑定。代码中只需操作数据即可反应到视图上,视图上编辑数据即可反应到模型里。详见 javafx 模块 README.md.
kfyty-boot
注解式 ioc、自动装配、作用域代理(单例/原型/刷新)、懒加载代理、配置文件属性自动绑定(支持嵌套的复杂类型绑定)、条件注解、jsr 条件注解校验器、异步事件、动态代理、spi、自定义 jar index 类加载器 等。
该框架刚开始仅仅是想自己造个轮子,从而加深对 spring 的理解。因此实现方式上,在命名上和 spring 注解保持一致,具体实现上先依据自己的思路实现,然后和 spring 的实现做对比,进而优化加深理解。
查看该框架的历史,你可以发现:
为什么一定必须要先生成 BeanDefinition,然后才能去生成 bean,为什么不能扫描到注解,直接就生成 bean
为什么 FactoryBean 定义的 bean,而 FactoryBean 本身的 bean name 一定要加 & 前缀
为什么一定要多级缓存才能实现 ioc,为什么一级缓存就是实现不了
为什么一定要有 Lazy 注解实现懒加载注入
等等
条件推断示例:
package com.kfyty.condition; import cn.hutool.core.lang.Assert; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.util.List; /** * 描述: 条件注解测试 * * @author kfyty725 * @date 2022/4/23 11:06 * @email kfyty725@hotmail.com */ @SpringBootApplication 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 下无法通过测试,但是在 kfyty-framework 中是可以测试通过的。
目前该框架还已经集成了下述框架:
kfyty-aop:aspect-j 集成
kfyty-javafx:一个实现了 javafx 模型与数据双向绑定的 mvvm 框架
kfyty-database:一个半 orm 框架,支持集成任意第三方模板引擎编写 SQL
kfyty-boot-starter-spring-tx:集成 spring 事务管理器
kfyty-mvc/kfyty-boot-starter-tomcat:mvc 模块/嵌入式 tomcat 服务器
kfyty-boot-starter-datasource:数据源自动配置
kfyty-boot-starter-validator:jsr 校验器自动配置
kfyty-boot-starter-uid-generator:集成百度 uid 生成器
kfyty-boot-starter-quartz:集成 quartz
kfyty-boot-starter-xxl-job:集成 xxl-job
kfyty-boot-starter-redisson:集成 redisson
kfyty-boot-starter-config-nacos:集成 nacos 配置中心,支持自动刷新配置
kfyty-boot-starter-discovery-nacos:集成 nacos 服务发现中心
kfyty-boot-starter-feign:集成 feign,可远程调用,可使用服务发现

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
❤️🔥FlyFlow 工作流完成与若依的对接:让工作更高效
官网地址:https://www.flyflow.cc 演示地址:http://pro.flyflow.cc 若依版本:https://www.flyflow.cc/guide/start/ruoyi.html 近日,我们很高兴地宣布,FlyFlow工作流正式完成了与若依系统的对接,为用户提供了更加便捷高效的工作体验。这一合作将为用户带来更多可能性,让工作流程更加流畅,提升工作效率。 作为一款功能强大的工作流管理工具,FlyFlow致力于帮助用户优化工作流程,提高团队协作效率。而若依系统,则是一套开源的企业级权限管理系统,为企业提供了全面的权限管理解决方案。此次对接的完成,将两者的优势相结合,为用户提供了更加完善的工作管理工具。 一、实现了更便捷的权限管理 通过与若依系统的对接,用户可以更加方便地进行权限管理。无论是对工作流程的管理还是对团队成员的权限设置,都可以在FlyFlow中直接进行操作,与若依系统实现了无缝对接。这意味着用户可以更加灵活地控制各项工作的权限,确保信息的安全性和合规性。 二、提升了工作流程的自动化程度 借助于FlyFlow强大的自动化功能,用户可以将常规的工作流...
- 下一篇
开源医疗大模型排行榜:健康领域大模型基准测试
多年来,大型语言模型 (LLMs) 已经发展成为一项具有巨大潜力,能够彻底改变医疗行业各个方面的开创性技术。这些模型,如 GPT-3,GPT-4 和 Med-PaLM 2,在理解和生成类人文本方面表现出了卓越的能力,使它们成为处理复杂医疗任务和改善病人护理的宝贵工具。它们在多种医疗应用中显示出巨大的前景,如医疗问答 (QA) 、对话系统和文本生成。此外,随着电子健康记录 (EHRs) 、医学文献和病人生成数据的指数级增长,LLMs 可以帮助医疗专业人员提取宝贵见解并做出明智的决策。 然而,尽管大型语言模型 (LLMs) 在医疗领域具有巨大的潜力,但仍存在一些重要且具体的挑战需要解决。 当模型用于娱乐对话方面时,错误的影响很小; 然而,在医疗领域使用时,情况并非如此,错误的解释和答案可能会对病人的护理和结果产生严重后果。语言模型提供的信息的准确性和可靠性可能是生死攸关的问题,因为它可能影响医疗决策、诊断和治疗计划。 例如,当有人问 GPT-3 关于孕妇可以用什么药的问题时,GPT-3 错误地建议使用四环素,尽管它也正确地说明了四环素对胎儿有害,孕妇不应该用。如果真按照这个错误的建议去给孕...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7