介绍
本系列文章将从Spring Boot的main函数入口,一步一步带领大家阅读spring boot的源代码,并且会详细解释spring boot各个类和方法上注释的含义,帮助阅读英文有困难的同学更好的理解spring boot的原理,话不多说,直接开始。
程序入口
通常在一个spring boot的应用中,会看到下面一段代码作为应用的入口
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
那么这段代码究竟做了什么呢,让我们深入来分析它背后的原理。当我们点击run
来查看源代码时,会看到下面这段代码,这段Java Doc说明这是一个助手方法,可以通过指定一个primarySource
的source源来启动,这个primarySource
其实就是我们的启动类Application
/**
* Static helper that can be used to run a {@link SpringApplication} from the
* specified source using default settings.
* @param primarySource the primary source to load
* @param args the application arguments (usually passed from a Java main method)
* @return the running {@link ApplicationContext}
*/
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class<?>[] { primarySource }, args);
}
接着,我们继续进入run
方法,你会看到另外一个helper方法,这个helper方法首先初始化一个SpringApplication
,然后再一次执行SpringApplication
实例的run
方法
public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
return (new SpringApplication(primarySources)).run(args);
}
初始化SpringApplication
我们将一行一行逐步讲解初始化SpringApplication
的逻辑
@SuppressWarnings({ "unchecked", "rawtypes" })
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySour