SpringBoot启动记录

一、生成SpringApplication
生成对象的时候
运行构造函数,首先初始化SpringApplication定义的属性值(属性在定义时有初始值的),然后运行构造函数中的语句。
构造函数中:获取WebApplicationType并设置
获取系统引导程序并设置(Bootstrapper),getSpringFactoriesInstances,设置bootstrappers
getSpringFactoriesInstances(ApplicationContextInitializer.class)
getSpringFactoriesInstances(ApplicationListener.class)

二、SpringApplication运行run方法生成ConfigurableApplicationContext
1.生成StopWatch,监测程序启动时间
2.创建DefaultBootstrapContext
3.为创建ConfigurableApplicationContext开始做准备
4.创建SpringApplicationRunListeners监听


	/**
	 * Run the Spring application, creating and refreshing a new
	 * {@link ApplicationContext}.
	 * @param args the application arguments (usually passed from a Java main method)
	 * @return a running {@link ApplicationContext}
	 */
	public ConfigurableApplicationContext run(String... args) {
		StopWatch stopWatch = new StopWatch();
		stopWatch.start();
		DefaultBootstrapContext bootstrapContext = createBootstrapContext();
		ConfigurableApplicationContext context = null;
		configureHeadlessProperty();
		SpringApplicationRunListeners listeners = getRunListeners(args);
		listeners.starting(bootstrapContext, this.mainApplicationClass);
		try {
			ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
			ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);
			configureIgnoreBeanInfo(environment);
			Banner printedBanner = printBanner(environment);
			context = createApplicationContext();
			context.setApplicationStartup(this.applicationStartup);
			prepareContext(bootstrapContext, 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);
		}
		catch (Throwable ex) {
			handleRunFailure(context, ex, listeners);
			throw new IllegalStateException(ex);
		}

		try {
			listeners.running(context);
		}
		catch (Throwable ex) {
			handleRunFailure(context, ex, null);
			throw new IllegalStateException(ex);
		}
		return context;
	}

记录网上较好的文章:
https://blog.csdn.net/qq_32828253/article/details/109496848?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11.pc_relevant_default&utm_relevant_index=18

posted @ 2022-02-18 23:00  小小白兔兔  阅读(64)  评论(0编辑  收藏  举报