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,让项目可以接收请求。

相关推荐
程序猿乐锅1 小时前
从0-1一文详解RabbitMQ
java·分布式·后端·中间件·rabbitmq·ruby
考虑考虑4 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长4 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
for_ever_love__5 小时前
MySQL 主从复制讲透:binlog 原理、搭建步骤与读写分离
java·数据库·mysql·binlog·读写分离·原理·主从复制
云浪5 小时前
Go源码分析:搞懂 Go 是如何实现堆的
后端·go·源码阅读
小π军7 小时前
操作系统面试题
java·linux·服务器
倔强的石头1067 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Shaoshing8 小时前
ThreadLocal
java·jvm·threadlocal
写后端的胖头鱼8 小时前
一文详解CAS
java·jvm·spring·cas·乐观锁·自旋