当前位置: 首页 > wzjs >正文

广州外贸营销型网站建设公司媒体邀约

广州外贸营销型网站建设公司,媒体邀约,网站建设 源代码,东莞网络推广优化本文完整解析 Spring Boot 启动流程的 9 个核心阶段,结合源码与实战场景,帮助开发者深入理解框架运行机制。适用于面试准备和技术原理学习。 一、启动入口:SpringApplication.run() public static ConfigurableApplicationContext run(Class…

本文完整解析 Spring Boot 启动流程的 9 个核心阶段,结合源码与实战场景,帮助开发者深入理解框架运行机制。适用于面试准备和技术原理学习。

一、启动入口:SpringApplication.run()

public static ConfigurableApplicationContext run(Class<?> primarySource, String[] args) {return new SpringApplication(primarySource).run(args);
}

二、完整启动流程(9大核心阶段)

阶段1:初始化启动计时器

StopWatch stopWatch = new StopWatch();
stopWatch.start();

阶段2:监听器初始化与启动事件

SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting(); // 发布ApplicationStartingEvent
  • ​作用​​:通知所有SpringApplicationRunListener启动开始
  • ​扩展点​​:可自定义监听器实现初始化日志、监控等操作

阶段3:环境准备与环境事件

ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArgs);
graph TDA[创建Environment对象] --> B[加载配置源]B --> C[解析Profile配置]C --> D[转换配置属性]D --> E[发布ApplicationEnvironmentPreparedEvent]

阶段4:打印Banner

Banner printedBanner = printBanner(environment);
  • 默认打印SPRING BOOT字符Logo
  • 支持自定义banner.txt文件或完全禁用

阶段5:创建应用上下文

context = createApplicationContext();

​上下文类型判断逻辑:​

protected ConfigurableApplicationContext createApplicationContext() {return switch (this.webApplicationType) {case SERVLET -> new AnnotationConfigServletWebServerApplicationContext();case REACTIVE -> new AnnotationConfigReactiveWebServerApplicationContext();default -> new AnnotationConfigApplicationContext(); // 非Web应用};
}

阶段6:上下文预处理

prepareContext(context, environment, listeners, appArgs, printedBanner);

​核心步骤:​

  1. 关联环境配置到上下文
  2. 应用ApplicationContextInitializer扩展点
  3. 发布ApplicationContextInitializedEvent
  4. 注册主配置类(@SpringBootApplication注解类)
  5. 发布ApplicationPreparedEvent

阶段7:★★★ 核心刷新阶段 ★★★

refreshContext(context); // 内部调用Spring的refresh()

​Spring Framework的12步刷新流程:​

public void refresh() {// 1. 准备刷新prepareRefresh();// 2. 获取BeanFactoryConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// 3. 准备BeanFactoryprepareBeanFactory(beanFactory);try {// 4. 后置处理BeanFactorypostProcessBeanFactory(beanFactory);// 5. ★★★ 执行BeanFactoryPostProcessor(自动配置入口)invokeBeanFactoryPostProcessors(beanFactory);// 6. 注册BeanPostProcessorregisterBeanPostProcessors(beanFactory);// 7. 初始化消息源initMessageSource();// 8. 初始化事件广播器initApplicationEventMulticaster();// 9. ★ Web容器启动关键步骤onRefresh();// 10. 注册监听器registerListeners();// 11. ★★★ 实例化所有非延迟单例BeanfinishBeanFactoryInitialization(beanFactory);// 12. 完成刷新finishRefresh();} catch (BeansException ex) {// 异常处理...}
}
刷新阶段重点说明:
  1. ​自动装配触发点​​(invokeBeanFactoryPostProcessors):

    protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) {PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());// 这里会处理@SpringBootApplication->加载自动配置类
    }
  2. ​嵌入式容器启动点​​(onRefresh):

    protected void onRefresh() {super.onRefresh();try {createWebServer(); // 启动Tomcat/Jetty} catch (Throwable ex) {throw new ApplicationContextException("Unable to start web server", ex);}
    }
  3. ​Bean实例化点​​(finishBeanFactoryInitialization):

    protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {// 初始化所有非延迟单例BeanbeanFactory.preInstantiateSingletons();
    }

阶段8:刷新后处理

afterRefresh(context, appArgs);
  • ​默认空方法​​,开发人员可重写实现自定义逻辑
  • 典型应用:初始化数据库数据、启动定时任务等

阶段9:事件通知与Runner执行

stopWatch.stop();
listeners.started(context); // ApplicationStartedEvent
callRunners(context, appArgs); // 执行ApplicationRunner/CommandLineRunner
listeners.running(context); // ApplicationReadyEvent
Runner执行机制:
private void callRunners(ApplicationContext context, ApplicationArguments args) {List<Object> runners = new ArrayList<>();runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());AnnotationAwareOrderComparator.sort(runners);for (Object runner : runners) {if (runner instanceof ApplicationRunner) {((ApplicationRunner) runner).run(args);}if (runner instanceof CommandLineRunner) {((CommandLineRunner) runner).run(args.getSourceArgs());}}
}

三、Spring Boot启动流程全景图

graph TDA[SpringApplication.run] --> B[启动计时器]B --> C[初始化监听器]C --> D[发布StartingEvent]D --> E[准备Environment]E --> F[打印Banner]F --> G[创建上下文]G --> H[预处理上下文]H --> I[refreshContext核心]I --> J[后置处理]J --> K[发布StartedEvent]K --> L[执行Runner]L --> M[发布ReadyEvent]

四、关键技术原理

1. 自动装配机制

  1. 通过@EnableAutoConfiguration引入自动配置
  2. AutoConfigurationImportSelector扫描META-INF/spring.factories
  3. 使用@Conditional系列注解实现条件装配

2. 嵌入式容器启动

  1. ​Servle容器​​:自动探测并初始化Tomcat/Jetty/Undertow
  2. ​Reactive容器​​:支持Netty/Reactor等
  3. ​启动时机​​:在onRefresh()阶段创建WebServer

3. 配置加载顺序

1. 命令行参数
2. 系统环境变量
3. JNDI属性
4. Java系统属性
5. Profile-specific配置(application-{profile}.yml)
6. 主配置文件(application.yml)
7. @Configuration注解的@PropertySource
8. SpringApplication.setDefaultProperties

http://www.dtcms.com/wzjs/398632.html

相关文章:

  • 河北pc端网站建设下载安装百度
  • 十堰推广公司日照seo优化
  • 软件开发工程师和前端开发工程师广州seo技术外包公司
  • 嘉兴品牌网站建设新闻株洲最新
  • 网站建设规划公司地址重庆seo网络推广优化
  • 做网站用什么服务器比较好淘宝代运营
  • 现在还做自适应网站百度推广效果
  • 社交网站是怎么做的指数型基金
  • 做义工的同城网站百度网页收录
  • 做医疗护具网站中国搜索引擎市场份额
  • 网站推广到海外怎么做bt磁力在线种子搜索神器下载
  • 做网站怎么自定义背景图片seo学校培训
  • 网站制作公司咨询热线网站关键词优化系统
  • 微信、网站提成方案点做爱站网站长seo综合查询
  • 企多维企业查询官网鸡西seo顾问
  • 哪个网站做的win10系统墨猴seo排名公司
  • 做健康食品的网站企业员工培训总结
  • yii2框架做的网站有哪些建立网站的基本流程
  • 仿站网站建设自媒体怎么做
  • 建筑师网站品牌策划方案ppt
  • asp网站压缩2022新闻热点10条
  • 安徽网站开发费用seo怎么提升关键词的排名
  • 网站开发技术总结原画培训机构哪里好
  • 如何优化营销型企业网站如何在百度做免费推广产品
  • 24小时学会网站建设外贸推广是做什么的
  • 网站建设用户调查问卷免费seo排名软件
  • 贵阳网站建设培训学校响应式模版移动优化
  • 什么网站可以在图片上做超链接整站优化快速排名
  • 常州免费建站seo服务外包公司
  • 开发人员工具百度seo快速排名