SpringBoot源码揭秘,一路探究与发现
2023-11-14 00:55:33
前言
一直以来,我都没有系统地研究过源码,除了先前独自搭建Mybatis的demo研究了下MyBatis的源码,基本上就是遇到问题的时候去看下源码把问题解决了,然后就没有然后了。当时研究MyBatis的时候,就感觉源码其实也没有那么高深莫测,只要静下心来一行一行地去读,其实还是能读懂的。
但研究的也不深,对于整体的架构,以及一些细节之处也没有一个比较全面的了解。前段时间,看到网上有很多人在分享Spring Boot的源码解析,觉得挺有意思的,就决定也来尝试一下。
初探SpringApplication
SpringApplication是SpringBoot的核心类,负责启动SpringBoot应用。它的源码位于org.springframework.boot.SpringApplication
类中。
public class SpringApplication implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private Set<Object> sources = new LinkedHashSet<>();
// 省略其他代码...
}
从这个类中,我们可以看到,SpringApplication实现了ApplicationContextInitializer接口。这个接口的作用是在ApplicationContext初始化的时候,做一些额外的操作。
在SpringApplication中,它主要做的事情就是在ApplicationContext初始化的时候,把我们通过@SpringBootApplication注解配置的类,添加到Spring容器中。
SpringApplication类中有一个run方法,这个方法是SpringBoot应用的入口。它负责初始化Spring容器,并启动SpringBoot应用。
public static ConfigurableApplicationContext run(Object... sources) {
return run(null, sources);
}
在这个方法中,我们传入了一个Object数组,这个数组中的元素就是我们通过@SpringBootApplication注解配置的类。SpringApplication会把这些类添加到Spring容器中,并启动SpringBoot应用。
总结
以上就是我对SpringBoot源码的一些初步探索。通过对SpringApplication类的分析,我们了解到了SpringBoot应用启动的过程,以及SpringApplication是如何把我们通过@SpringBootApplication注解配置的类添加到Spring容器中的。
这些知识对我们理解SpringBoot的原理和使用SpringBoot开发应用都有很大的帮助。