SpringApplication.run(Demo4Application.class, args)
生成SpringApplication 对象(判断webApplicationType是(Servlet(判断有DispatcherServlet类)或者Reactive(判断有DispatcherHandler类))或者None);
从spring-boot的jar包中的META-INF/spring.factories拿键值对BootstrapRegistryInitializer/ApplicationContextInitializer/ApplicationListener放入数组并set为SpringApplication对应的属性;
classloader经debug分析为appclassloader或者ClassLoader

run(args)方法:
根据网络类型(Servlet/Reactive)新建网络环境,SpringApplicationRunListeners根据bootstrapContext和环境设置自己的环境属性,
createApplicationContext()方法创建spring容器,根据网络类型先生成原始的applicationcontext, applicationcontext(就是spring容器,图灵学院周瑜老师springboot核心源码讲解)设置了上边提到的网络环境属性
从spring-boot的jar包中的META-INF/spring.factories拿键值对SpringApplicationRunListener,
listener根据 bootstrapContext, applicationArguments配置环境,根据boots