0. 总纲|Java Web 自研框架 18 年Java架构决策复盘

0. 总纲|Java Web 自研框架 18 年Java架构决策复盘

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

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

本系列将从以下 10 个核心决策展开:

1. 放弃 Spring,手写轻量 IOC 容器

2. 注解路由 + 参数路由,实现新老代码平滑迁移

3. 统一入参解析,前后端彻底解耦

4. CGLIB + 责任链实现轻量 AOP,搞定事务、日志、监控

5. ASM 字节码直读,100% 获取方法参数名

6. ThreadLocal 上下文管理,业务层彻底告别 Http

7. MongoDB 混合存储,零侵入提升查询性能

8. 修改 MyBatis 源码 1 行,搞定 Oracle 物理分页

9. Excel 模板驱动政务报表,业务人员直接改格式

10. Activiti 工作流任意跳转、回退,满足政务灵活审批

所有内容均来自生产环境真实落地,可直接复用、可直接用于面试、可直接写进简历。

本文为 Java 政务企业级实战系列总纲,全系列共 10 篇,拆解 IOC、AOP、MongoDB、MyBatis、Activiti 工作流等政务开发核心技术。
收藏追更不迷路,评论区聊聊你在政务/企业开发中最头疼的架构问题!

系列文目录

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

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

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

  • 核心看点:route.javaservice() 方法里一套判断逻辑,先走注解路由,找不到再走老的 Business/Action 参数路由
  • 适用场景:系统迭代升级,不能停机迁移

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

  • 核心看点:praserInParameter() 方法根据方法签名自动转换参数类型——DataCenter、Dao、List、HttpServletRequest 都能自动识别
  • 适用场景:前端统一POST JSON,后端方法签名随意定义

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

  • 核心看点:doProxy + proxyFilter + 责任链模式,@Trans@Logger@monitoring 注解即用
  • 适用场景:横切关注点不侵入业务代码

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

  • 核心看点:getMethodParameterNamesByAsm4() 用ASM直接读class文件字节码,从LocalVariableTable获取参数名
  • 适用场景:编译时不加 -parameters 也能拿到真实参数名

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

  • 核心看点:AppContextContainer 继承 ThreadLocal,在Servlet层绑定用户、连接等信息,业务层随时取用
  • 适用场景:业务代码不依赖Servlet API

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

  • 核心看点:Dao上配置 level 属性(1=双写、2=纯MongoDB+异步同步、3=纯关系库),DBUtil 自动路由
  • 适用场景:不能引入Redis/MQ但又需要缓存层的政务系统

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

  • 核心看点:PaginationInterceptor 用绑定变量 ? 做分页而非拼接SQL,配合 OracleDialect/MsSqlDialect 方言
  • 适用场景:Oracle环境下分页SQL硬解析导致性能问题

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

  • 核心看点:doPrintView.java 一个Servlet通吃所有报表,Excel文件即模板,jxl读数据转PDF预览
  • 适用场景:报表格式频繁变动,开发人员不想反复改代码

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

  • 核心看点:turnTransition() 运行时动态修改流程定义的连线,跳转到任意节点,完成后恢复原状
  • 适用场景:政务审批需要自由跳转、回退、转办的场景

框架全景图

┌─────────────────────────────────────────────────────────┐ │ 前端层 │ │ 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 #政务信息化 #架构设计 #技术复盘

Read more

ChatGPT替代品?LocalAI+CPolar打造你的隐私保护AI实验室

ChatGPT替代品?LocalAI+CPolar打造你的隐私保护AI实验室

文章目录 * 前言 * 【视频教程】 * 1. Docker部署 * 2. 简单使用演示 * 3. 安装cpolar内网穿透 * 4. 配置公网地址 * 5. 配置固定公网地址 前言 当你用AI处理客户合同却担心数据被训练时,当企业因合规要求禁止使用云端API时——LocalAI的出现就像给数据安全上了"双重保险"。这款开源工具能让Llama、Phi等大模型直接跑在你的笔记本上,全程不上传任何数据,还完美兼容OpenAI API。特别适合处理商业机密的律师、需要离线工作的科研人员,以及对"数据主权"有执念的技术极客。最惊艳的是它的CPU推理能力:我的老旧ThinkPad都能流畅运行7B模型,彻底打破"AI必须依赖GPU"的神话 🖥️ 作为经常处理敏感数据的程序员,我被它的"隐形模式"彻底征服。上周帮医疗团队分析病例文本,LocalAI在本地完成实体识别,原始数据从未离开医院内网——这种"

2026最新保姆级教程:手把手教你零基础安装与配置本地 AI 智能体 OpenClaw

2026最新保姆级教程:手把手教你零基础安装与配置本地 AI 智能体 OpenClaw

文章目录 * 前言 * 一、下载并安装 OpenClaw * 二、启动配置向导与绑定 AI 大脑 * 1. 启动向导 * 2. 确认账户类型 * 3. 选择快速入门模式 * 4. 选择大模型 (AI 大脑) * 5. 选择 API 接口区域 * 6. 填入你的专属 API Key * 三、连接通讯渠道 (Telegram) * 1. 选择 Telegram * 2. 绑定机器人的 Token * 第四步:安装扩展插件与重启服务 * 1. 技能插件 (Skills) * 2. 附加功能 (Hooks) * 3. 重启并应用配置 * 第五步:设备安全授权与最终测试 (见证奇迹!) * 1.

2026年 Trae 收费模式改变 —— AI 编程“免费午餐”终结后的生存法则

2026年 Trae 收费模式改变 —— AI 编程“免费午餐”终结后的生存法则

关键词:Trae, Cursor, AI 编程成本, Token 计费, Agent 模式, 职业转型 大家好,我是飞哥!👋 2026年,AI编辑器Trae 也将收费模式改为按 Token 收费。 有些开发者开始动摇:“AI 编辑器越来越贵,是不是应该放弃使用,回归纯手写代码?” 对于用户来说,这无疑是一次涨价。但在飞哥看来,这次涨价背后释放了两个非常关键的信号: 1. AI 技术已进入稳定成熟期: 厂商不再需要通过“免费/低价补贴”来换取用户数据进行模型迭代。产品已经足够成熟,有底气接受市场真实定价的检验。 2. 倒逼用户进化,优胜劣汰: 涨价是一道筛子。它在要求用户大幅提升自己的 AI 使用水平(如 Prompt 技巧、Context 管理)。 * 低级使用者(只会问“怎么写代码”

不是再做一个聊天框,ToClaw把 AI 真正放进你的桌面

不是再做一个聊天框,ToClaw把 AI 真正放进你的桌面

不是再做一个聊天框,ToClaw把 AI 真正放进你的桌面 1、Agent 很多,但真正让人留下来的,不只是“会不会聊天” 最近这波 Agent 产品热起来以后,很多人都在强调“AI 不只回答问题,还能替你做事”。但真到落地层面,决定体验好坏的往往不是模型参数,而是两个更现实的问题:它能不能进入真实工作流,以及普通人能不能马上用起来。 ToClaw 给我的感觉,恰恰是把重心放在了这两个问题上。官方对它的定位很直接:它是ToDesk远程控制基于 OpenClaw 深度定制、集成远程控制运行时的 AI 助手,强调“手机一句话,你的电脑自动执行”;它不是停留在生成文字,而是要把“思考—执行—反馈”这条链路接到真实电脑环境里。官网列出的核心方向也很明确,包括开箱即用、远程控制运行时、AI 直接操作电脑、凭证安全管理、工作 IM 接入,