您的位置:首页 > 文旅 > 旅游 > 湖南网站建设哪里好_爱心建站网_视频号最新动作_百度公司地址

湖南网站建设哪里好_爱心建站网_视频号最新动作_百度公司地址

2025/4/15 20:42:42 来源:https://blog.csdn.net/m0_73748193/article/details/147126803  浏览:    关键词:湖南网站建设哪里好_爱心建站网_视频号最新动作_百度公司地址
湖南网站建设哪里好_爱心建站网_视频号最新动作_百度公司地址

下面分两部分系统讲解:

第一部分:Spring Boot 自动配置原理(核心是自动装配)


一、Spring Boot 的自动配置是干嘛的?

传统 Spring 开发时,你要写一堆 XML 或配置类,非常麻烦。Spring Boot 引入了“自动配置”机制——你只需要引入依赖并加几个注解,框架就帮你完成配置初始化
在这里插入图片描述

你几乎不需要管:

  • 数据源如何配置
  • Web 服务如何启动
  • 日志、Jackson、缓存如何整合

这一切都由自动配置帮你完成了。


二、核心注解:@SpringBootApplication

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

这个注解其实是个组合注解,相当于:

@Configuration
@EnableAutoConfiguration
@ComponentScan
  • @EnableAutoConfiguration:是自动配置的关键入口
  • @ComponentScan:扫描当前包及子包的 Spring Bean
  • @Configuration:表示这是一个配置类

三、自动配置的背后机制(重要!)

1)@EnableAutoConfiguration 内部用到了 @Import
@Import(AutoConfigurationImportSelector.class)

也就是说,它会把一堆自动配置类注册到 Spring 容器里。

2)AutoConfigurationImportSelector 会读取下面这个配置文件:
META-INF/spring.factories

里面有很多形如:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
...

这些类都带有 @Configuration 注解,会被 Spring 自动加载成配置类。

📌 重点理解:Spring Boot 会扫描所有依赖中的 spring.factories 文件,自动注册这些配置类。


四、条件装配:@ConditionalOnXxx 是关键

Spring Boot 不会傻傻把所有配置都启用,而是根据当前环境条件决定是否装配

比如:

@ConditionalOnClass(DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
public class DataSourceAutoConfiguration {// 配置数据源
}
  • 有某个类才生效
  • 没有用户自定义 Bean 才启用默认配置

✅ 所以你可以覆盖它的默认配置!


五、用户配置优先级

如果你写了自己的配置,Spring Boot 默认配置会被你的配置覆盖,非常灵活。


第二部分:Spring Boot 启动原理


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

public static void main(String[] args) {SpringApplication.run(MyApp.class, args);
}

这个 run() 方法做了以下几件事:


二、启动流程关键步骤详解

我们分步骤拆解下:


1️⃣ 创建 SpringApplication 实例
SpringApplication app = new SpringApplication(MyApp.class);

会完成:

  • 判断项目类型(普通项目、Web 项目还是响应式项目)
  • 推断主配置类
  • 加载初始化器(ApplicationContextInitializer
  • 加载监听器(ApplicationListener

2️⃣ 调用 run() 方法
app.run(args);

这一步做了很多重要事:

✅ 加载环境变量(Environment)

包括 application.yml、系统环境变量、命令行参数等。

✅ 通知监听器(Spring Boot 提供的生命周期扩展点)

监听器会在项目启动前、加载环境、创建容器、容器刷新、应用启动后等关键节点被触发。

✅ 创建 ApplicationContext

Spring Boot 根据项目类型选择:

  • Web:AnnotationConfigServletWebServerApplicationContext
  • 普通项目:AnnotationConfigApplicationContext
✅ 注册 Bean,并刷新容器

把所有 @Component@Service@Repository@Controller 注册进 Spring 容器。

并执行 @Configuration 里的 @Bean 方法。


3️⃣ 启动内嵌 Web 容器(如 Tomcat)

Spring Boot 会自动创建并启动内置 Tomcat、Jetty 或 Undertow,并注册 DispatcherServlet。


4️⃣ 回调 CommandLineRunnerApplicationRunner

项目启动后,如果你定义了这两个接口,会被自动回调:

@Component
public class MyRunner implements CommandLineRunner {public void run(String... args) {System.out.println("启动完成后执行");}
}

🔄 一图看懂 Spring Boot 启动流程

Spring Boot 启动流程图解

在这里插入图片描述


常见问题

问题回答关键点
Spring Boot 是如何实现自动装配的?@EnableAutoConfiguration + spring.factories + @ConditionalOn...
自动配置类是怎么被加载的?通过 SpringFactoriesLoader 读取 META-INF/spring.factories
如果我不想用默认配置怎么办?提供同类型 Bean,默认配置类就不会生效
Spring Boot 启动流程有哪些阶段?创建实例 → 加载环境 → 创建容器 → 加载配置 → 启动 Tomcat

✅ 总结

  • Spring Boot 的“自动配置”靠的是 @EnableAutoConfiguration + spring.factories 配合条件注解。
  • 启动流程的核心是 SpringApplication.run(),它完成了环境准备、Bean 加载、容器创建、Web 容器启动等步骤。
  • 灵活可扩展:你可以随时覆盖默认配置,也可以通过监听器、初始化器参与启动流程。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com