本篇文章主要介绍了" spring boot 源码解析-SpringApplication初始化",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
前?我们?成?个spring boot 项?时,会?带?个启动类. 代码如下:@SpringBootApplicationpublic class Spring...
前?
我们?成?个spring boot 项?时,会?带?个启动类. 代码如下:
@SpringBootApplication
public class SpringBootAnalysisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAnalysisApplication.class, args);
}
}
就是这么简单的代码,构成了spring boot的世界. 那么代码中只有?个@SpringBootApplication 注解 和 调?了SpringApplication#run
?法.那么我们先来解析SpringApplication的run?法.
解析
?先调?了org.springframework.boot.SpringApplication#run(Object, String...) ?法.代码如下:
public static ConfigurableApplicationContext run(Object source, String... args) {
return run(new Object[] { source }, args);
}
- 接着调?如下代码:
public static ConfigurableApplicationContext run(Object[] sources, String[] args) {
return new SpringApplication(sources).run(args);
}
可以发现 ?先初始化了SpringApplication,然后调?其实例?法:run.
2. 在 SpringApplication 的构造器中,调?了 initialize ?法.
public SpringApplication(Object... sources) {
initialize(sources);
}
- 3. SpringApplication#initialize?法代码如下:
private void initialize(Object[] sources) {
if (sources != null && sources.length > 0) {
this.sources.addAll(Arrays.asList(sources));
}
this.webEnvironment = deduceWebEnvironment();
setInitializers((Collection) getSpringFactoriesInstances(
ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
可以看到做了如下5件事:
1. 如果sources?度?于0的话,加?到SpringApplication的sources中,该sources是?个LinkedHashSet.
2. 调?deduceWebEnvironment?法判断是否是web环境
3. 设置initializers.
4. 设置Listeners.
5. 设置mainApplicationClass.
4. deduceWebEnvironment代码如下: