深耕政务信息化 20 年,自研 Java Web 框架支撑省级新农保、全国跨省医保结算等核心民生系统,稳定运行 18 年。
本系列不讲空泛理论,只复盘真实生产环境下的架构决策、踩坑经历、落地方案,不求优雅,但求能跑、能扛、能维护。
在长期维护政务系统的过程中,逐渐形成一套轻量、稳定、无侵入、可长期演进的架构思路。这套框架没有依赖流行全家桶,而是围绕业务痛点一点点打磨,最终支撑了海量高并发、高可靠的民生业务。
本系列将从以下 10 个核心决策展开:
- 放弃 Spring,手写轻量 IOC 容器
- 注解路由 + 参数路由,实现新老代码平滑迁移
- 统一入参解析,前后端彻底解耦
- CGLIB + 责任链实现轻量 AOP,搞定事务、日志、监控
- ASM 字节码直读,100% 获取方法参数名
- ThreadLocal 上下文管理,业务层彻底告别 Http
- MongoDB 混合存储,零侵入提升查询性能
- 修改 MyBatis 源码 1 行,搞定 Oracle 物理分页
- Excel 模板驱动政务报表,业务人员直接改格式
- 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 的包装,但这是它的一个优点:每一行代码我都能说清来龙去脉,任何问题我都能从入口一步步追踪到数据库。


