通过启动Application类,我们可以完成Spring初始化、自动组装等一系列操作。启动过程通过两个入口:@SpringBootApplication和SpringApplication.run
1.进入方式:
一个静态助手,可用于从
指定源使用默认设置 which primarySource 的
要加载的主要源,args 应用程序参数(通常通过
来自 Java main 方法),这会导致运行
应用上下文
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class<?>[] { primarySource }, args);
}
调用静态run方法后,通过一系列的调用我们最终会进入SpringApplication类中的如下位置
如你所见,这个方法做了两件事,初始化Spring Application类,调用内部公共的run方法。
2。 Spring 应用初始化
运行 Spring 应用程序,创建并刷新一个新的
ApplicationContext with-param args 应用程序参数(通常
从 Java main 方法传递)返回一个正在运行的
应用上下文
public ConfigurableApplicationContext run(String... args) {
...
try {
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
configureIgnoreBeanInfo(environment);
Banner printedBanner = printBanner(environment);
context = createApplicationContext();
exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class,
new Class[] { ConfigurableApplicationContext.class }, context);
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
refreshContext(context);
afterRefresh(context, applicationArguments);
stopWatch.stop();
if (this.logStartupInfo) {
new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch);
}
listeners.started(context);
callRunners(context, applicationArguments);
}
...
}
run() 负责管理上下文、环境、监听器、applicationArguments、printedBanner,正如我们在
中看到的那样
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
您可能想在此处探索更多详细信息
Startup process source analysis