弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述springboot启动逻辑分析-------简述SpringApplication.run相关的知识,希望能为你提供帮助。
【springboot启动逻辑分析-------简述SpringApplication.run】调用链路为:
at org.springframework.boot.SpringApplication.run(SpringApplication.java:296) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) at com.ivy.demo.DemoApplication.main(DemoApplication.java:16)
代码:
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch();
//(1).记录开始时间 stopWatch.start(); ConfigurableApplicationContext context = null; Collection< SpringBootExceptionReporter> exceptionReporters = new ArrayList< > (); configureHeadlessProperty();
//(2).获取配置的所有的SpringApplicationRunListener实现类,并封装到SpringApplicationRunListeners类 SpringApplicationRunListeners listeners = getRunListeners(args);
//(3).调用listener列表starting方法 listeners.starting(); try { ApplicationArguments applicationArguments = new DefaultApplicationArguments( args);
//(4).准备环境 ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
//(5).根据spring.beaninfo.ignore配置是否忽略属性 configureIgnoreBeanInfo(environment);
//(6).打开欢迎字体 Banner printedBanner = printBanner(environment);
//(7).创建ApplicationContext context = createApplicationContext();
//(8).获取错误报告类 exceptionReporters = getSpringFactoriesInstances( SpringBootExceptionReporter.class, new Class[] { ConfigurableApplicationContext.class }, context); prepareContext(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, exceptionReporters, listeners); throw new IllegalStateException(ex); }try { listeners.running(context); } catch (Throwable ex) { handleRunFailure(context, ex, exceptionReporters, null); throw new IllegalStateException(ex); } return context; }
推荐阅读
- Android开发——实现子线程更新UI
- .net AutoMapper(对象与对象之间的映射器) 的简单使用
- Paper | MFQE 2.0: A New Approach for Multi-frame Quality Enhancement on Compressed Video
- android --------AndroidX的迁移
- 如何使用点击超链接的方式打开Android手机上的应用
- android之android.intent.category.DEFAULT
- HDevEngine in .NET Applications MultiThreading
- App Crawler
- JAVA错误提示:The operation is not applicable to the current selection.Select a field which is not declar