跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

18 年政务系统实战:Java 自研框架架构决策复盘

政务信息化领域深耕 20 年,基于真实生产环境沉淀出一套轻量稳定的 Java 自研 Web 框架。该框架支撑省级新农保及跨省医保结算等核心民生系统,稳定运行 18 年。核心架构围绕业务痛点打磨,放弃流行全家桶,实现无侵入、可演进。涵盖手写 IOC 容器、注解与参数路由平滑迁移、统一入参解析、CGLIB 轻量 AOP、ASM 字节码参数读取、ThreadLocal 上下文管理、MongoDB 混合存储、MyBatis 物理分页优化、Excel 模板驱动报表及 Activiti 工作流任意流转等十大关键决策。强调实时有据、修改可查,确保问题快速定位至业务与数据层面,适合部署受限及高可靠要求的政务企业级开发场景。

王初壹发布于 2026/4/10更新于 2026/5/2110 浏览
18 年政务系统实战:Java 自研框架架构决策复盘

深耕政务信息化 20 年,这套自研 Java Web 框架支撑了省级新农保、全国跨省医保结算等核心民生系统,稳定运行 18 年。本复盘不讲空泛理论,只聚焦真实生产环境下的架构决策、踩坑经历与落地方案,不求优雅,但求能跑、能扛、能维护。

在长期维护政务系统的过程中,逐渐形成一套轻量、稳定、无侵入、可长期演进的架构思路。这套框架没有依赖流行全家桶,而是围绕业务痛点一点点打磨,最终支撑了海量高并发、高可靠的民生业务。核心决策主要围绕以下十个方面展开:

  1. 放弃 Spring,手写轻量 IOC 容器:通过自定义注解 @bean、@property、@responseMapping 配合 BeanFactory,搞定实例化、注入与路由注册,适用于部署环境受限场景。
  2. 注解路由 + 参数路由,实现新老代码平滑迁移:在路由分发逻辑中先走注解路由,找不到再走老的 Business/Action 参数路由,确保系统迭代升级时不中断服务。
  3. 统一入参解析,前后端彻底解耦:根据方法签名自动转换参数类型,DataCenter、Dao、List、HttpServletRequest 都能自动识别,前端统一 POST JSON,后端方法签名随意定义。
  4. CGLIB + 责任链实现轻量 AOP:利用 doProxy + proxyFilter + 责任链模式,通过 @Trans、@Logger、@monitoring 注解即可处理事务、日志与监控,横切关注点不侵入业务代码。
  5. ASM 字节码直读,100% 获取方法参数名:使用 ASM 直接读取 class 文件字节码,从 LocalVariableTable 获取参数名,解决编译时不加 -parameters 也能拿到真实参数名的痛点。
  6. ThreadLocal 上下文管理,业务层彻底告别 Http:继承 ThreadLocal 的 AppContextContainer 在 Servlet 层绑定用户、连接等信息,业务层随时取用,不再依赖 Servlet API。
  7. MongoDB 混合存储,零侵入提升查询性能:在 Dao 上配置 level 属性(1=双写、2=纯 MongoDB+ 异步同步、3=纯关系库),由 DBUtil 自动路由,无需引入 Redis/MQ 也能抗住缓存需求。
  8. 修改 MyBatis 源码 1 行,搞定 Oracle 物理分页:PaginationInterceptor 用绑定变量 ? 做分页而非拼接 SQL,配合 OracleDialect/MSsqlDialect 方言,避开硬解析大坑。
  9. Excel 模板驱动政务报表,业务人员直接改格式:一个 Servlet 通吃所有报表,Excel 文件即模板,jxl 读数据转 PDF 预览,解决报表格式频繁变动导致开发反复改代码的问题。
  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. 框架全景图
  2. 十个决策的统一原则
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VS2019下C++调用YOLOv3动态链接库实现目标检测
  • Node.js 最新版下载安装与 npm 淘宝镜像配置教程
  • 知网与维普 AIGC 检测机制对比及选择建议
  • 基于 Rokid 眼镜的 AI 天气、GPS 定位与旅游规划实现
  • VinylMusicPlayer Android 开源音乐播放器使用指南
  • AIGC 插画创作技术解析与代码实战
  • WebAssembly 技术全景解析:核心机制与应用场景
  • Vue3 开发实战:主流 AI 代码助手选择与 VSCode 配置
  • 飞算 JavaAI 实战指南:安装、配置与核心功能解析
  • 智能家居 AI 侦测方案:树莓派与云端协同
  • Java 日期差计算函数 Bug 导致游戏道具异常发放
  • OpenHarmony 下 Flutter 跨域难题:flutter_cors 实战与适配方案
  • AI入门系列:AI新手必看:人工智能发展历程与现状分析
  • 2024 行业大模型调研报告
  • Spring AI Model Context Protocol 集成 Brave Search 完整案例
  • Spring Cloud 微服务架构概述与工程搭建实战
  • 商汤开源 SenseNova-MARS 多模态搜索推理模型
  • C++ 内核性能优化十大误区:如何避免常见陷阱
  • Linux 基础使用与 Java 项目部署指南
  • 后端视角下的 HTML 前端基础入门

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online