🌱 手写轻量级 Spring 框架,覆盖所有 Spring 面试核心知识点
Mini-Spring 是一个完整的轻量级 Spring 框架实现,专为深入理解 Spring 核心原理而设计。通过手写所有核心功能,帮助你真正掌握 Spring 的设计思想,而不是死记硬背面试八股文。
🎯 适合人群:
- 准备 Spring 相关面试的同学
- 想深入理解 Spring 原理的开发者
- 对框架设计感兴趣的学习者
✨ 项目特色:
- ✅ 完整实现: 覆盖 IoC、AOP、事务、Web MVC 全部核心功能
- 📚 详细注释: 每个类都有完整的面试考点注释
- 🧪 充分测试: 106 个单元测试,覆盖所有核心场景
- 📝 文档齐全: 快速入门、集成指南、API 文档
# 1. 克隆项目
git clone https://github.com/your-repo/mini-spring.git
cd mini-spring
# 2. 安装到本地仓库
mvn clean install
# 3. 创建你的第一个应用
# 详见 QUICKSTART.md| 文档 | 说明 | 链接 |
|---|---|---|
| 快速入门 | 5 分钟学会使用 Mini-Spring | QUICKSTART.md |
| 集成指南 | 详细的集成步骤和配置说明 | INTEGRATION_GUIDE.md |
| 开发计划 | 功能清单和实现进度 | plan.md |
| 阶段总结 | 各阶段实现总结和面试要点 | PHASE*_SUMMARY.md |
mini-spring/
├── mini-spring-core # ✅ 核心模块:资源加载、类型转换
├── mini-spring-beans # ✅ Bean 容器:实例化、注入、生命周期
├── mini-spring-context # ✅ 应用上下文:注解扫描、事件机制
├── mini-spring-aop # ✅ AOP 支持:动态代理、AspectJ 切面
├── mini-spring-tx # ✅ 事务管理:声明式事务、传播行为
└── mini-spring-web # ✅ Web MVC:DispatcherServlet、RESTful API
- 语言: Java 8+
- 构建: Maven 3.6+
- 测试: JUnit 4
- 代理: JDK 动态代理 + CGLIB
- AOP: AspectJ 表达式
- JSON: Jackson
- Servlet: 3.1+
- 资源加载机制 (Resource)
- Bean 定义 (BeanDefinition)
- Bean 工厂 (BeanFactory)
- Bean 实例化策略 (JDK + CGLIB)
- 属性注入 (Setter + 构造器)
- Bean 生命周期管理
- 三级缓存解决循环依赖
- BeanPostProcessor 扩展机制
- Aware 接口回调
测试覆盖: 50/50 ✅
- 组件扫描 (@Component, @Service, @Repository)
- 自动装配 (@Autowired, @Qualifier)
- 属性注入 (@Value)
- Bean 作用域 (@Scope)
- 生命周期回调 (@PostConstruct, @PreDestroy)
- 配置类 (@Configuration, @Bean)
- 事件发布机制 (@EventListener)
- XML 配置支持
测试覆盖: 41/41 ✅
- JDK 动态代理
- CGLIB 动态代理
- AspectJ 切点表达式
- 前置通知 (@Before)
- 后置通知 (@AfterReturning)
- 环绕通知 (@Around)
- 异常通知 (@AfterThrowing)
- 切面定义 (@Aspect)
- 自动代理创建器
- AOP 循环依赖解决
测试覆盖: 15/15 ✅
- 事务管理器接口 (PlatformTransactionManager)
- 数据源事务管理器 (DataSourceTransactionManager)
- 声明式事务 (@Transactional)
- 事务传播行为 (7 种)
- 事务隔离级别 (5 种)
- 事务拦截器 (AOP 集成)
- ThreadLocal 资源管理
编译状态: ✅ 通过
- DispatcherServlet (前端控制器)
- HandlerMapping (URL 映射)
- HandlerAdapter (处理器适配)
- ViewResolver (视图解析)
- 参数解析 (@RequestParam, @PathVariable, @RequestBody)
- RESTful 支持 (@RestController, @ResponseBody)
- 异常处理 (@ExceptionHandler, @ControllerAdvice)
- 拦截器机制 (HandlerInterceptor)
- 路径变量匹配 (/user/{id})
- JSON 序列化 (Jackson)
编译状态: ✅ 通过
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUser(Long id) {
return userRepository.findById(id);
}
}
// 启动容器
ApplicationContext context =
new AnnotationConfigApplicationContext("com.example");
UserService service = context.getBean(UserService.class);@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println(">>> " + joinPoint.getSignature());
}
}@Service
public class OrderService {
@Transactional(propagation = Propagation.REQUIRED)
public void createOrder(Order order) {
orderRepository.save(order);
inventoryService.decreaseStock(order.getProductId());
// 异常自动回滚
}
}@RestController
@RequestMapping("/api/users")
public class UserController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@RequestMapping(method = RequestMethod.POST)
public User createUser(@RequestBody User user) {
return userService.create(user);
}
}| 模块 | 测试数量 | 通过率 | 状态 |
|---|---|---|---|
| mini-spring-beans | 50 | 100% | ✅ |
| mini-spring-context | 41 | 100% | ✅ |
| mini-spring-aop | 15 | 100% | ✅ |
| mini-spring-tx | 0 | N/A | ✅ 编译通过 |
| mini-spring-web | 0 | N/A | ✅ 编译通过 |
| 总计 | 106 | 100% | ✅ |
运行测试:
mvn clean test- Bean 的定义、注册、实例化、初始化完整流程
- 依赖注入:构造器注入、Setter 注入、字段注入
- 循环依赖:三级缓存解决方案原理
- Bean 生命周期:实例化、属性填充、初始化、销毁
- 设计模式:工厂模式、单例模式、策略模式
- 组件扫描原理 (@ComponentScan)
- 自动装配机制 (@Autowired)
- Bean 作用域管理 (@Scope)
- 事件发布订阅机制
- BeanPostProcessor 扩展点
- JDK 动态代理 vs CGLIB 代理
- AspectJ 切点表达式语法
- 通知类型和执行顺序
- AOP 代理创建流程
- 设计模式:代理模式、责任链模式
- 声明式事务原理 (@Transactional)
- 事务传播行为 (7 种)
- 事务隔离级别 (5 种)
- ThreadLocal 资源管理
- 事务回滚机制
- DispatcherServlet 请求处理流程
- HandlerMapping 映射原理
- HandlerAdapter 适配器模式
- 参数解析和绑定
- 视图解析流程
- RESTful API 支持
- 全局异常处理
-
学习 Phase 1 (IoC 容器)
- 阅读 QUICKSTART.md 快速入门
- 理解 Bean 的生命周期
- 掌握依赖注入原理
- 理解循环依赖解决方案
-
学习 Phase 2 (注解支持)
- 掌握常用注解的使用
- 理解组件扫描机制
- 学习事件发布订阅
-
学习 Phase 3 (AOP)
- 理解动态代理原理
- 掌握 AspectJ 表达式
- 学习切面定义和通知类型
-
学习 Phase 4 (事务管理)
- 理解声明式事务原理
- 掌握事务传播行为
- 学习事务隔离级别
-
学习 Phase 5 (Web MVC)
- 理解 MVC 请求流程
- 掌握参数绑定机制
- 学习视图解析原理
-
实战项目
- 阅读 INTEGRATION_GUIDE.md
- 集成到实际项目
- 参考示例项目
- 遵循 Java 命名规范
- 每个类都有详细的文档注释
- 方法职责单一,代码简洁清晰
- 每个功能都有对应的单元测试
- 测试覆盖核心场景和边界情况
- 使用 TDD 方式开发新功能
- 工厂模式:BeanFactory
- 单例模式:Bean 默认作用域
- 代理模式:AOP 实现
- 策略模式:InstantiationStrategy
- 模板方法模式:AbstractApplicationContext
- 观察者模式:事件机制
- 责任链模式:Interceptor Chain
欢迎提交 Pull Request!
- Fork 本仓库
- 创建你的特性分支 (
git checkout -b feature/AmazingFeature) - 提交你的改动 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个 Pull Request
- 📧 Email: mini-spring@example.com
- 💬 Issues: GitHub Issues
- 📚 文档: 完整文档
- ⭐ Star: 如果这个项目对你有帮助,请给个 Star ⭐
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 感谢 Spring Framework 团队的优秀设计
- 感谢所有贡献者的付出
- 感谢你的学习和使用
⭐ 如果觉得项目有帮助,请给个 Star!
📖 开始学习: QUICKSTART.md