1 SpringApplication实例化
1.1 .run(args);
1.2 stopWatch.start(); 监控Java代码运行时间和性能分析
1.3 configureHeadlessProperty(); 设置jdk系统属性java.awt.headless启动
1.4 SpringApplicationRunListeners listeners = getRunListeners(args); 获取启动时监听器
getRunListeners(args) 从SpringFactoriesLoader的cache中取SpringApplicationRunListener类型的类(全限定 名),然后实例化后返回。
( getSpringFactoriesInstances在第一次被调用时会将类路径下所有的META-INF/spring.factories的文件中的属性 进行加载并缓存到SpringFactoriesLoader的缓存cache中)
1.5 listeners.starting(); 遍历事件,排除非匹配事件,发布匹配事件监听器。
1.6 ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); main方法args传参
prepareEnvironment(listeners, applicationArguments) 准备运行时的环境
1.7 configureIgnoreBeanInfo(environment); 配置忽视的bean的信息
1.8 printBanner(environment) 打印旗帜,也就是程序启动日志开头的图案
1.9 createApplicationContext() .AnnotationConfigServletWebServerApplicationContext 创建应用上下文,对其部分属性: reader、scanner、beanFactory进行了实例化;reader中实例化了属性conditionEvaluator; scanner中添加了两个AnnotationTypeFilter:一个针对@Component,一个针对 @ManagedBean;beanFactory中注册了8个注解配置处理器。
1.10 prepareContext(context, environment, listeners, applicationArguments, printedBanner); 设置上下文的各个属性
1.11 refreshContext(context); 调用 AbstractApplicationContext refresh()
1.11.1 prepareRefresh();
1.11.2 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
创建一个ConfigurableListableBeanFactory 类型的bean工厂并装载bean的定义