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

安卓做视频网站好奇迹网站建设多少钱

安卓做视频网站好,奇迹网站建设多少钱,app制作开发报价,wordpress调用文章方法一、核心启动流程概览 Spring Boot 的启动流程可概括为 ​7 个关键阶段​: 1. 加载启动类 (Main Class) 2. 初始化 SpringApplication 实例 3. 加载配置 & 准备环境 (Environment) 4. 创建 ApplicationContext(容器) 5. 刷新容器&#…

一、核心启动流程概览

Spring Boot 的启动流程可概括为 ​7 个关键阶段​:

1. 加载启动类 (Main Class)
2. 初始化 SpringApplication 实例
3. 加载配置 & 准备环境 (Environment)
4. 创建 ApplicationContext(容器)
5. 刷新容器(核心:Bean 的加载与初始化)
6. 执行 Runner 接口(ApplicationRunner/CommandLineRunner)
7. 启动嵌入式 Web 服务器(如 Tomcat 或 Netty)

二、详细流程解析

1. 启动入口:main() 方法

触发点​:执行 SpringApplication.run(Application.class, args)

@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
  • 作用​:初始化 Spring 容器并启动应用。
  • 关键类​:SpringApplication
2. SpringApplication 的初始化

核心步骤​:

  • 推断应用类型​:根据类路径决定是 Web 应用(Servlet、Reactive)还是普通应用。
  • ​**加载 SpringApplicationInitializer**​:通过 SpringFactoriesLoader 加载所有 META-INF/spring.factories 中注册的初始化器。
  • ​**加载 ApplicationListener**​:加载事件监听器(如 ConfigFileApplicationListener 读取配置文件)。
  • 推断主配置类​:通过 main() 方法的启动类作为主配置源。
3. 环境准备(Environment)

关键操作​:

  • 合并配置源​:加载默认配置、命令行参数、application.properties/application.yml
  • 配置 Profiles​:激活指定的环境配置(如 dev, prod)。
  • ​**触发 ApplicationEnvironmentPreparedEvent**​:通知所有环境准备好的监听器。

代码示例​:

// SpringApplication.java
ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
4. 创建 ApplicationContext

根据应用类型创建容器​:

  • Web 应用(Servlet)​​:创建 AnnotationConfigServletWebServerApplicationContext
  • Web 应用(Reactive)​​:创建 AnnotationConfigReactiveWebServerApplicationContext
  • 非 Web 应用​:创建 AnnotationConfigApplicationContext

关键过程​:

  • 通过反射实例化容器。
  • 注册启动类(主配置类)到容器。
5. 容器刷新(核心阶段)

调用 AbstractApplicationContext#refresh() 方法​:

  1. 准备阶段​:设置容器 ID、初始化属性源。
  2. 解析配置类​:通过 ConfigurationClassPostProcessor 处理 @ComponentScan@Import 等注解。
  3. ​**执行 BeanFactoryPostProcessor**​:例如处理 @ConfigurationProperties 或自定义配置。
  4. 注册并实例化 Bean​:
    • Spring Boot 自动配置​:加载所有 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中的自动配置类(如 DataSourceAutoConfiguration)。
    • 使用 @Conditional 系列注解(如 @ConditionalOnClass)决定是否创建 Bean。
  5. 初始化单例 Bean​:触发 @PostConstruct 方法和 InitializingBean 接口。
  6. 启动嵌入式服务器​:如果是 Web 应用,触发 ServletWebServerApplicationContext#onRefresh() 以启动 Tomcat/Jetty 等服务器。

代码示例​:

// SpringApplication.java
refreshContext(context); // 触发 refresh()
6. 执行 Runner 接口

执行顺序​:

  1. ApplicationRunnerrun() 方法。
  2. CommandLineRunnerrun() 方法。

用途​:用于在应用启动后执行自定义逻辑(如初始化缓存、连接外部服务)。

7. 启动完成

触发事件​:ApplicationReadyEvent,标志应用已就绪。


三、自动配置(Auto-configuration)原理

1. 触发条件
  • 依赖触发​:项目的类路径中是否存在特定类(如 DataSource.class)。
  • 配置触发​:application.properties 中的属性是否匹配。
2. 实现机制
  • ​**@EnableAutoConfiguration 注解**​:开启自动配置。
  • ​**spring.factories 文件**​:在 spring-boot-autoconfigure.jar 中定义所有自动配置类。
  • 条件化注解​:
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @ConditionalOnMissingBean(DataSource.class)
    public class DataSourceAutoConfiguration { /* ... */ }
3. 自动配置类示例
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET) // 条件判断
@ConditionalOnClass(DispatcherServlet.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
public class DispatcherServletAutoConfiguration {@Beanpublic DispatcherServlet dispatcherServlet() {return new DispatcherServlet();}
}

四、嵌入式 Web 服务器启动

流程​:

  1. 检测依赖​:如 spring-boot-starter-web 包含 Tomcat。
  2. 创建 WebServer​:在容器刷新阶段调用 ServletWebServerApplicationContext#onRefresh()
  3. 初始化 Servlet 容器​:加载 DispatServlet 并注册到 ServletContext。
  4. 监听端口​:默认启动在 8080 端口。

关键类​:

  • TomcatServletWebServerFactory(Tomcat 实现)。
  • NettyReactiveWebServerFactory(Netty 实现)。

五、核心流程图解

+----------------+       +--------------------+       +-------------------+
| main()方法启动  | -->   | SpringApplication  | -->   | 加载配置 & 环境准备 |
+----------------+       +--------------------+       +-------------------+|                            |v                            v+----------------------+       +--------------------+| 创建 ApplicationContext | --> | refresh() 容器刷新  |+----------------------+       +--------------------+|                            |v                            v+----------------------+       +--------------------+| 执行 Runner 接口逻辑  | <-- | 启动嵌入式 Web 服务器  |+----------------------+       +--------------------+

六、调试与扩展

1. 调试启动流程
  • 添加启动参数​:--debug 参数打印自动配置的条件评估报告。
  • 监控事件​:实现 ApplicationListener 监听不同阶段事件(如 ApplicationStartingEvent)。
2. 自定义扩展
  • 自定义 Starter​:
    1. 创建 META-INF/spring.factories 文件。
    2. 定义自动配置类(使用 @Conditional 注解)。
  • 覆盖默认配置​:
    @Bean
    @ConditionalOnMissingBean // 覆盖默认 Bean
    public DataSource myDataSource() { return new CustomDataSource(); }

七、常见问题

问题解决方案
Bean 冲突导致启动失败使用 @Primary 注解指定主 Bean,或在配置类中使用 @ConditionalOnMissingBean
端口被占用修改 server.port 属性或在命令行指定 --server.port=8081
自动配置未生效检查类路径是否存在触发自动配置的依赖,并确保没有手动排除自动配置类

八、总结

  • 核心理念​:约定优于配置,通过自动化和条件化加载降低开发复杂度。
  • 启动优化​:分析 SpringApplication 的初始化阶段和容器刷新过程可针对性优化启动时间。
  • 扩展能力​:通过自定义 Starter 和监听器灵活扩展框架功能。

文章转载自:

http://1nlojA7p.wfykn.cn
http://THY4ieyu.wfykn.cn
http://XTGPVaAU.wfykn.cn
http://T6bYHiYX.wfykn.cn
http://NEA7Ok72.wfykn.cn
http://d6ykH3Ny.wfykn.cn
http://4WPBp8it.wfykn.cn
http://MIpUAhGT.wfykn.cn
http://AImhEnuf.wfykn.cn
http://Q6RtMt7W.wfykn.cn
http://iDDTO6aj.wfykn.cn
http://y9NMLQBQ.wfykn.cn
http://eEAhHDyU.wfykn.cn
http://Oeq60XUR.wfykn.cn
http://knc2hKiu.wfykn.cn
http://1h37kmcG.wfykn.cn
http://lObJjgKE.wfykn.cn
http://SAHHYJh8.wfykn.cn
http://Nc1qhUjU.wfykn.cn
http://VdB3shzb.wfykn.cn
http://FbuOAqf8.wfykn.cn
http://6QeLM6lq.wfykn.cn
http://ZTjZtK2o.wfykn.cn
http://UPRH0OfI.wfykn.cn
http://ztJzTt8v.wfykn.cn
http://GNuHEzKK.wfykn.cn
http://cWGDHedk.wfykn.cn
http://KPddrcBA.wfykn.cn
http://2rpGj0Pm.wfykn.cn
http://vaeUydzA.wfykn.cn
http://www.dtcms.com/wzjs/727732.html

相关文章:

  • 网站开发一般用什么工具wordpress图片太大
  • 免费app下载网站外包网络推广公司怎么选
  • 东莞专业网站推广怎么做咸鱼之王小程序
  • 做网站出现的常见问题如何自己创建购物网站
  • 山东郓城住房和城乡建设厅网站网站建设微信商城运营
  • 卓航网站开发长春做网站哪家好
  • 长湖南营销型网站山西建立网站营销策划
  • 如何做团购网站陕西省城乡住房建设厅官网
  • 加强社区网站建设商学院网站建设建议
  • 易语言做网站图片下载英文网站建设服务合同模板下载
  • 南海建设网站旅游网站建设的功能定位
  • 崇安网站建设html网页设计怎么写代码
  • 电子商务网站建设的范围是什么意思网站每年需要续费吗
  • 怎么做cms网站网店代运营商
  • 微信网站开发教程视频wordpress小工具文件
  • 免费长尾词挖掘工具宁波企业网站优化报价
  • 专业的龙岗网站建设手机网站建设哪儿好
  • 网站平台搭建包括哪些最新建设招聘信息网站
  • 工程建设指挥部网站wordpress 國内加速
  • 我要做个网站该怎么做中国建设银行卖狗年纪念币官方网站
  • 做一个电商网站成品网站 修改首页
  • 深圳做网站排名哪家好哪里有学计算机培训班
  • 做外贸出口的网站做网站资讯运营
  • 河北省建设安全监督站的网站wordpress 官方主题 有哪些
  • 鹏鹞网站页面代码wordpress迁hexo
  • 网站基础建设巴巴商友圈广西自治区住房和城乡建设厅网站
  • 嘉兴公司网站建设网络推广文案
  • php网站开发速成网站需求分析怎么写
  • 淮安网站建设个人博客微博网站可以做兼职吗
  • 开拓网站建设公司开封府景点网站建设的目的