当前位置: 首页 > news >正文

# Java Web自研框架18年架构决策复盘(系列文)

Java Web自研框架18年架构决策复盘(系列文总纲)

非科班野生程序员,深耕政务信息化20年,这套自研Java Web框架支撑过省级新农保、全国首例跨省医保结算等核心民生系统,18年稳定运行至今。本系列拆解10个核心架构决策,全是政务场景踩坑后的实用解法,不求优雅但求落地,愿同赛道朋友少走弯路,也欢迎懂行大佬轻拍指正。最后感谢豆包、智谱、OpenCode,决策是我做的,代码是我搓的,文字是他们总结的。


作者:许彰午(xuzhangwu)

我不是科班出身的专门搞架构的,2001年从VC开始写代码,2003年转PB/SQL,2007年开始接触Java,从那之后开始自己从零搭一套 Java Web 框架,从Servlet到数据库,每一层都是自己写的。这个框架跑了十几年,还在用。

我的不是教程,是我对自己这套框架的架构决策的复盘。每一个决策背后都有一个真实的业务问题。


系列文目录

### 系列文1:为什么放弃成熟的Spring,我偏要手写轻量IOC容器?

  • 核心看点:三个自定义注解@bean@property@responseMapping+ 一个BeanFactory,搞定实例化、注入、路由注册
  • 适用场景:部署环境受限、依赖要求极简的政务系统

系列文2:新老代码共存的终极解法——注解路由+参数路由平滑迁移

### 系列文3:前后端彻底解耦!统一入参解析,前端只发JSON,后端随意

### 系列文4:轻量AOP落地!CGLIB代理+责任链,搞定事务日志监控

### 系列文5:解决Java编译痛点!ASM字节码直读,100%获取方法参数名

### 系列文6:ThreadLocal上下文管理,让业务层彻底告别HttpServletRequest

### 系列文7:零侵入提升查询性能!MongoDB混合存储,不用Redis也能抗

### 系列文8:改MyBatis源码1行,搞定Oracle物理分页,避开硬解析大坑

### 系列文9:政务报表自由!Excel模板驱动,业务人员改格式,开发零参与

### 系列文10:突破Activiti限制!政务工作流任意流转,支持跳退回退


框架全景图

┌─────────────────────────────────────────────────────────┐ │ 前端层 │ │ browise RIA 框架(基于 Dojo 封装) │ │ DataCenter / DataStore / JSON 序列化 │ └──────────────────────────┬──────────────────────────────┘ │ POST JSON │ ┌──────────────────────────▼──────────────────────────────┐ │ route.java(唯一Servlet) │ │ ┌──────────────┬──────────────┬──────────────┐ │ │ │ 登录校验 │ 路由分发 │ 异常处理 │ │ │ └──────────────┴──────────────┴──────────────┘ │ └──────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────▼──────────────────────────────┐ │ BeanFactory(IOC 容器) │ │ @bean 实例化 @property 注入 @aoppoint 代理 │ │ │ │ CGLIB 代理 + 责任链模式 │ │ @Trans 事务 @Logger 日志 @monitoring 监控 │ └──────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────▼──────────────────────────────┐ │ 业务层(@responseMapping 路由) │ │ Control → Service → Mapper(MyBatis) │ └──────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────▼──────────────────────────────┐ │ DBUtil(ORM 层) │ │ ┌──────────────┬──────────────┬──────────────┐ │ │ │ MyBatis │ MongoDB缓存 │ 通用查询 │ │ │ │ CRUD │ level 1/2/3 │ JDBC方式写文件│ │ │ └──────────────┴──────────────┴──────────────┘ │ │ ┌──────────────┬──────────────┐ │ │ │ SM4加解密 │ AWR报告解读 │ │ │ │ @myCode │ JVM监控 │ │ │ └──────────────┴──────────────┘ │ └──────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────▼──────────────────────────────┐ │ 数据库(Oracle / MongoDB) │ └─────────────────────────────────────────────────────────┘

十个决策的统一原则

决策原则
自研 IOC只加需要的不加不需要的
注解路由 + 参数兼容不破坏老系统
统一入参解析前后端解耦
CGLIB + AOP加注解的方式
ASM 参数读取自己的问题自己解决
ThreadLocal 上下文业务层不依赖Servlet
MongoDB 混合存储零侵入,渐进式采用
改 MyBatis 源码分页第一天解决的事用了十几年
Excel 模板报表用业务人员熟悉的工具
Activiti 任意流转不能改变框架时就找到"洞"绕过去

一句话:做到实时有据,修改即刻可查。

不追求架构漂亮,不追求技术先进,只追求——出了问题我能从代码快速定位到业务,业务人员能快速进入查到数据。

这个框架没有 Spring 的依赖注入,没有 MyBatis-Plus 的包装,但这是它的一个优点:每一行代码我都能说清来龙去脉,任何问题我都能从入口一步步追踪到数据库。


如果这些文章对你有启发,欢迎点赞收藏评论。如果写得不对,也请指正。毕竟是自己的框架,难免有个人偏见,欢迎在评论区讨论。


系列导航:
- [系列文1:为什么放弃成熟的Spring,我偏要手写轻量IOC容器?]
- [系列文2:新老代码共存的终极解法——注解路由+参数路由平滑迁移]
- [系列文3:前后端彻底解耦!统一入参解析,前端只发JSON,后端随意]
- [系列文4:轻量AOP落地!CGLIB代理+责任链,搞定事务日志监控]
- [系列文5:解决Java编译痛点!ASM字节码直读,100%获取方法参数名]
- [系列文6:ThreadLocal上下文管理,让业务层彻底告别HttpServletRequest]
- [系列文7:零侵入提升查询性能!MongoDB混合存储,不用Redis也能抗]
- [系列文8:改MyBatis源码1行,搞定Oracle物理分页,避开硬解析大坑]
- [系列文9:政务报表自由!Excel模板驱动,业务人员改格式,开发零参与]
- [系列文10:突破Activiti限制!政务工作流任意流转,支持跳退回退]


作者:许彰午| 非科班野生程序员,深耕政务信息化20年

标签:#Java #自研框架 #IOC #AOP #MyBatis #MongoDB #Activiti #政务信息化 #架构设计 #技术复盘

http://www.jsqmd.com/news/581909/

相关文章:

  • 网络安全入门:SQL注入从原理到实战
  • Visual C++运行库一站式解决方案:从问题排查到高级应用指南
  • (2)JVS物联网平台“设备管理模块功能说明”
  • 开源工具G-Helper实现华硕笔记本色彩配置修复与显示优化的完整方案
  • 20260403_151844_字节大模型二面:Agent的记忆覆盖问题如何解决?
  • 如何使用Unlocker工具在VMware中启用macOS虚拟机支持
  • java Day08-2
  • 告别滚动混乱:Scroll Reverser让macOS输入设备各得其所
  • Windows与Office激活神器:KMS_VL_ALL_AIO全面使用指南
  • 利用快马平台快速集成豆包AI,十分钟搭建智能对话应用原型
  • 3分钟免费搞定Axure RP中文汉化:完整语言包安装指南
  • CDA证书能帮助做经营分析吗?财务人最关心的几个实际问题
  • ITIL流程为什么落不了地?自动化与AI如何真正改变IT服务管理的执行力
  • Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
  • LoRA训练助手在时间序列预测中的创新应用
  • 2026最权威的AI科研方案解析与推荐
  • XGP-save-extractor:Xbox玩家的跨平台存档迁移利器
  • springboot中的消息队列和用法
  • 2026届最火的AI辅助论文网站横评
  • Warcraft Font Merger:解决游戏多语言显示问题的字体优化方案
  • 三步掌握数字记忆:WeChatMsg全面数据管理指南
  • PX4飞控系统全面解析:从底层架构到实战应用的深度指南
  • C++ 并发核心模型总结—— 从阻塞 IO 到 Reactor + 协程的完整理解(附 mini epoll + Reactor demo)
  • 3个关键步骤构建企业级本地语音合成系统:tts-vue深度解析
  • C++的std--ranges选择管理
  • 心理学知识分享(2026.4.3)
  • 大模型面试宝典(2026版)发布!收藏这份程序员进阶指南,高薪Offer等你拿!
  • 视频获取工具新纪元:N_m3u8DL-CLI-SimpleG全方位解析
  • Stanford CoreNLP:自然语言处理工具包的技术解析与实战指南
  • 牛客网Java面试题总结(金三银四最新版)