参考自廖大的博客:https://liaoxuefeng.com/books/summerframework/introduction/index.html
学习一个框架最好的方法是实现一个
| ID | Problem | Article |
|---|---|---|
| 000 | 实现资源扫描器 | 解决思路 |
| 001 | 创建BeanDefinition | 解决思路 |
| 002 | 创建Bean实例 | 解决思路 |
| 003 | 实现BeanPostProcessor | 解决思路 |
| 004 | 实现AOP | 解决思路 |
| 005 | 实现JDBCTemplate | 解决思路 |
| 006 | 实现事务 | 解决思路 |
| 007 | 实现WebMvc | 解决思路 |
| 007 | 实现Boot | 解决思路 |
总共用了 7k 多行代码实现了一个迷你的 springboot,已实现特性:
- 实现资源扫描器
- 实现 IOC
- 实现 BeanPostProcessor
- 实现 AOP
- 实现 JDBCTemplate
- 实现事务
- 实现 WebMvc
- 实现 Boot
- 实现 FactoryBean:FactoryBean 是 spring 提供的工厂 bean,用于复杂 Bean 的创建(如代理对象、连接池等)
- 实现 spring 的 spi 机制
- 实现 JarLauncher:springboot 是通过 JarLauncher,使用自定义的 ClassLoader 去加载 class 和 jar 包,而且提供了 Maven 插件,自动设置 Main-Class。 这部分实现起来比较复杂,而本项目是通过解压 war 包的办法实现 Tomcat 的 ClassLoader 加载