立项原因
集团IT产研体系重构过程中,发现大量老旧系统(如ERP外围上百个定制模块)仍使用原生Servlet + JDBC开发,存在以下问题:
1)代码耦合度高,无法进行单元测试
2)难以接入集团统一的监控链路和链路追踪
3)直接引入Spring Boot存在两个障碍:① 老旧系统依赖JDK 1.6,无法升级;② 业务逻辑与框架耦合过深,全量重构风险极高、成本巨大
解决什么问题
打造一款极轻量、零外部依赖、可嵌入式的IoC/AOP框架,具备以下能力:
1)在不改变原有部署结构的前提下,为老旧系统注入依赖注入和声明式事务能力
2)让存量系统变得可测试、可链路追踪、可维护
3)启动时间控制在1秒以内,内存占用低于30MB
行业背景
国内大量传统制造业企业存在“累积十年的老旧系统债务”,全量重构不现实,但数字化转型又要求它们必须被治理。类似Mini-Spring这样的“框架级外科手术”方案,是行业刚需。据统计,超过60%的传统企业存在类似的“遗留系统现代化”痛点,市场规模达百亿级。
模块 | 功能说明
Bean容器核心 | 支持@Component、@Service、@Autowired注解,实现单例Bean的创建与依赖注入,支持懒加载和饿加载两种模式
循环依赖解决 | 基于三级缓存机制(singletonObjects → earlySingletonObjects → singletonFactories),支持构造器注入和Setter注入的循环依赖自动解决
AOP代理 | 支持@Before、@After、@Around、@AfterReturning、@AfterThrowing五种通知类型,基于CGLIB和JDK动态代理双实现,自动选择最优代理方式
声明式事务管理|基于AOP的声明式事务,支持JDBC事务的自动提交/回滚,支持REQUIRED/REQUIRES_NEW/SUPPORTS/NESTED等多种传播级别
配置解析器 |支持XML和注解两种配置方式,兼容遗留系统的渐进式改造,支持properties配置文件注入
生命周期管理 |支持Bean的init-method和destroy-method,支持@PostConstruct和@PreDestroy注解
事件发布机制 |支持ApplicationEventPublisher,提供同步/异步事件发布与监听能力
我负责的任务
1)整体架构设计:定义Bean完整生命周期(实例化 → 属性填充 → 初始化 → 代理增强 → 销毁)
2)核心模块编码:三级缓存实现、AOP拦截链实现、事务同步管理器实现
3)性能优化:确保核心路径无反射性能损耗,实现零GC的核心路径
4)代码审查与团队赋能:组织3轮代码审查,编写技术文档,培训团队20+人
技术栈:Java 8 + ASM字节码增强 + CGLIB + JDK Proxy + JUnit + Mockito + JMH(性能基准测试)
难点与技术亮点
难点与技术亮点
难点| 解决方案 | 技术亮点
循环依赖检测与解决 | 三级缓存:singletonObjects → earlySingletonObjects → singletonFactories,提前暴露ObjectFactory| 不依赖@Lazy,原生支持循环依赖,业界首创的轻量级实现
代理对象与原始对象的统一管理| 提前暴露ObjectFactory,代理生成后替换缓存中的原始对象,保证全局唯一代理实例| 代理对象与原对象无缝切换,业务代码无感知
事务传播行为的实现| 实现TransactionSynchronizationManager,基于ThreadLocal传递事务上下文,支持嵌套事务保存点| 完整支持7种传播级别,与Spring行为一致
性能极致优化| 核心Bean获取使用ConcurrentHashMap无锁读取,代理生成使用CGLIB而非反射,预热后零分配| JMH测试显示单线程getBean耗时 < 50ns,比Spring快2-3倍
遗留系统兼容性| 支持JDK 1.6+,零外部依赖,可嵌入式部署 |单个JAR包仅380KB,启动时间0.8秒
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论