Skip to content

ayouran/bassis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bassis

当前项目为最新位置,旧地址请转到 liuchengts/bassis

目的在于开发出类似springboot使用方式的框架,同时加入其它特性,使其原生支持分布式,借此窥探java语言特性、jvm、spring实现方式,使技术广度和深度得到提升,对后续阅读理解spring、hibernate等开源框架有一个强大的基础,对jvm有一定的认知能力。

  • 我是一个java开发者,而非spring开发者
  • 技术为了形成系统,站到更高的层面而学习,而不是单纯为了工作

更新说明

  • 2023-01-28

    • 增加boot下关于http请求处理和响应的若干功能
      • http的请求头默认约定
      • http的请求携带参数的方式
      • @RequestMapping 支持自动检测请求方式进行方法入参的转换处理(不需要显示声明入参是json
      • 保留返回html页面的功能,但不完全实现它
      • @RequestMapping工作前做出路由到方法参数特征标记
    • 修复boothttp的若干bug
      • json参数的异步处理bug
      • 表单参数的特征判断处理
  • 2023-01-27

    • 实现@Listener
    • 去掉boot下的test代码,测试全部由bassis-test完成
    • 修复若干beanFactory中的bug
  • 2023-01-13

    • 更新jdk依赖为11,后续不再支持jdk8
    • 更新asm apiasm5
    • 重构基于vertx开发的bassis_boot,并通过测试
    • 删除bassis_boot中对tomcat的所有支持和依赖
    • 重构http请求方式支持,允许一个路由同时存在多种请求方式
    • 丢弃http拦截器与过滤器,全部采用aop直接实现
    • 增加http快速寻址与快速建立vertx http路由的算法
    • 启动模式完全符合springBoot的使用习惯(启动类上不需要任何注解)
    • 增强aop功能中可以追加任意参数及方法本身的入参进入aop方法供其使用
  • 2021-02-01

    • 更新日志框架为 slf4j 使用logback实现
      • 增加logback集成到当前框架
      • bassis_bean 下对日志框架进行测试
    • 计划重构 bassis_bean 部分代码
      • 重写循环依赖注入解决的问题
    • 计划重写 bassis_boot 部分代码
      • tomcat去掉,改由vertx实现
      • 将基于vertx作为本框架io核心,以及后期的分布式基础支撑
    • 计划暂时停止维护bassis_data,主力开发前两项

说明

  • bassis_tools 基于必须的jar支持重写一些工具方法
  • bassis_bean 提供自动扫描、bean管理、全注解、ioc、aop、动态代理,全局事件等功能
  • bassis_boot 嵌入tomcat8.5,增加main函数启动方式,需要bassis_bean的支持,实现框架的web,提供类似springmvc的一些功能,例如控制器自动匹配、拦截器栈、及松耦合方式使用bassis_hibernate完成多数据源自动注入与切换等功能
  • bassis_boot 使用vertx用于网络通信,增加main函数启动方式,需要bassis_bean的支持,实现框架的web,提供类似springBoot的一些功能,例如控制器自动匹配、及松耦合方式使用bassis_hibernate完成多数据源自动注入与切换等功能
  • bassis_data 前期基于jdbc进行开发

项目演示

演示 web 功能

  • 直接运行 bassis-testbassis-boot下的test部分 即可

演示 bean 功能(只启动框架核心的bean部分)

  • 可以配置启动参数 bassis.start.schema=core 或者直接运行 bassis-bean下的test部分

注意

本框架为手写框架,基于jdk8开发与编译,在低于此版本的jre上运行可能会出现异常。 模块依赖关系为:

  • bassis_tools -> 基本第三方jar依赖
  • bassis_bean -> bassis_tools 基础依赖
  • bassis_boot -> bassis_bean 基础依赖
  • bassis_data -> bassis_bean 基础依赖
  • 详细情况请参见具体的pom.xml

用到的第三方jar包:

  • log4j 1.2.17
  • gson 2.8.0
  • cglib 3.2.12
  • mysql-connector-java 5.1.40
  • servlet-api 4.0.0
  • tomcat 8.5.35
  • logback 1.3.0-alpha5
  • slf4j-api 2.0.0-alpha1
  • vertx-web 4.2.3

目前进度(已完成):

bassis_tools

  • 反射工具
  • 基础、包装类型判定
  • 自定义异常
  • gc计数器
  • json工具
  • Properties文件读取器
  • string工具
  • 并发测试工具
  • http请求工具
  • log4j默认配置
  • logback默认配置

bassis_bean

  • class扫描器
  • @Autowired 实现
  • @Component 实现
  • @Aop 实现
  • @Scope 实现
  • 基于cglibjdk动态代理
  • 基于cglibbean copy
  • 自定义事件
  • bean工厂
  • 属性循环依赖注入
  • 接口到实现类转换注入
  • @Listener 实现

bassis_boot

  • main函数启动tomcat
  • 静态main函数启动(无需注解)
  • 默认基本启动配置
  • 默认filter及编码filter
  • 默认servlet容器
  • @Controller 实现
  • 请求路径自动匹配bean实现
  • @Interceptor及Interceptor栈实现
  • @RequestMapping 实现
  • 数据装配与解析返回基本实现
  • vertx集成封装,作为基础通信组件

bassis_data

  • 封装jdbc

目前进度(需要调整及未完成的功能):

bassis_tools

  • 无,按需求适当增加

bassis_bean

  • @Autowired 需要根据反射实现自动获取注入对象 去掉aclass参数 -- 已完成
  • @Aop 需要根据反射实现自动获取注入对象 去掉aclass参数 -- 已完成
  • @Scope 需要针对多实例模式下的beancopy或者重新创建操作 -- 已完成

bassis_boot

  • 默认基本启动配置 需要支持个性化配置参数 -- 已完成
  • 默认servlet容器 需要作为bassis_web基础依赖入口 -- 已完成
  • @Controller 需要重写ioc逻辑 要与@Component保持一致 -- 已完成
  • 请求路径自动匹配bean实现 需要优化路径存储已经寻址算法 -- 已完成
  • @Interceptor及Interceptor栈实现 需要调试来兼容最新的aop功能 -- 舍弃
  • @RequestMapping 实现,需要配合路径自动匹配 -- 已完成
  • 数据装配与解析返回基本实现,需要重写定义大部分返回逻辑,抽离页面与数据的耦合 -- 已完成
  • 增加http的认证(cookie、token等) -- 未完成

bassis_hibernate

  • 多数据源jdbc
  • 事务分组支持提交、回滚等功能

其他问题

  • 编译及打包报错,增加maven运行参数 -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true