主要了解和学习下SpringBoot启动的大致原理是如何,以及知道几个注解的真正含义和用途是什么,SpringBoot就可以以SpringApplication.run(Bootstrap.class);这样的一句代码作为启动的入口。
1、SpringApplication 对象实例化
SpringApplication 文件
public static ConfigurableApplicationContext run(Object[] sources, String[] args) { // 传递的source其实就是类Bootstrap return new SpringApplication(sources).run(args); // 实例化一个SpringApplication对象执行run方法}
实例化的时候又会执行initialize 方法
private void initialize(Object[] sources) { // 这个source依旧是上文说的Bootstrap.class 类 if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources)); // 添加到source资源列表里面去 } this.webEnvironment = deduceWebEnvironment(); // 设置其是否为web环境 setInitializers((Collection) getSpringFactoriesInstances( ApplicationContextInitializer.class)); setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); // 拆分为两步,一步是getSpringFactoriesInstances,再者就是set操作 // set操作很简单,就是设置当前对象的初始化对象以及监听器 this.mainApplicationClass = deduceMainApplicationClass(); // 通过堆栈信息,推断 main方法的类对象为当前的主程序类}private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet