SpringBoot启动原理

  1. SpringApplication.run() 启动,先准备环境配置,

    读取 application.yml、properties、命令行参数、环境变量、JVM 参数等。

  2. Spring Boot 根据 classpath 判断应用类型。

    如果有 Spring MVC、Servlet、Tomcat 相关类,就认为是普通 Web 项目,

    创建支持 Web 的 Spring 容器。

  3. 执行容器的 refresh() 方法。

    在这个过程中,@ComponentScan 会扫描我们自己写的 Controller、Service、Component 等类,

    注册成 BeanDefinition。

    同时 @EnableAutoConfiguration 会加载自动配置类,

    根据 classpath 依赖、配置文件和条件注解决定哪些自动配置生效,

    并把相关组件也注册成 BeanDefinition。

  4. BeanDefinition 都准备好以后,

    Spring 开始实例化非懒加载的单例 Bean,

    并完成依赖注入、初始化等流程。

    这时候 Controller、Service、RedisTemplate、DispatcherServlet 等对象才真正被创建出来。

  5. 对于 Web 项目,Spring Boot 会启动内嵌 Tomcat,

    Tomcat 开始监听端口,请求进来后交给 DispatcherServlet,

    最后分发到对应的 Controller 方法。

Spring Boot 启动时,先读取配置,再根据 classpath 判断应用类型并创建对应容器。进入 refresh 后,Spring 会把我们自己写的组件和自动配置提供的组件都注册成 BeanDefinition。BeanDefinition 准备好后,再统一实例化非懒加载单例 Bean,并完成依赖注入。对于 Web 项目,最后会启动内嵌 Tomcat,让项目可以接收请求。

相关推荐
古法老登瞎折腾6 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
智能运维指南7 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
小满zs7 小时前
Go语言第十七章(反射)
后端·go
小满zs7 小时前
Go语言第十五章(JSON序列化)
后端·go
小满zs7 小时前
Go语言第十六章(自定义类型)
后端·go
yz_aiks8 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设8 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都8 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵8 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作