1. 引导类(Bootstrap Class)
启动一个 Spring Boot 应用程序的第一步是编写引导类,该类包含了一个 main
方法,负责启动整个应用程序。例如:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- @SpringBootApplication 注解是一个复合注解,它集成了
@Configuration
,@EnableAutoConfiguration
, 和@ComponentScan
。- @Configuration 表示这个类是配置类,替代了传统的 XML 配置文件。
- @EnableAutoConfiguration 启用了 Spring Boot 的自动配置机制,基于项目中的依赖自动配置合适的 Spring Bean。
- @ComponentScan 自动扫描引导类所在的包及其子包中使用了特定注解的组件,如
@Component
,@Service
,@Repository
,@Controller
。
2. SpringApplication 类的作用
SpringApplication.run(Application.class, args)
是启动 Spring Boot 应用的核心方法。它主要分为以下几个步骤:
- 准备环境(Prepare Environment):创建并配置
SpringApplication
实例,并初始化必要的组件和上下文。 - 创建并配置 ApplicationContext:选择合适的 ApplicationContext 类型,比如 Web 应用会选择
AnnotationConfigServletWebServerApplicationContext
。 - 打印 Spring Boot Banner:在启动时显示欢迎信息,可以通过设置
spring.main.banner-mode=off
来关闭。
3. 自动配置(Auto-Configuration)
@EnableAutoConfiguration
根据项目的依赖和配置自动装配合适的 Spring Bean。通过读取 META-INF/spring.factories
文件中的配置类来实现自动配置。Spring Boot 使用条件化配置(Conditional Configuration),根据当前的应用环境智能地做出判断,只配置必要的组件,避免过度配置。
4. 刷新 ApplicationContext(Refresh Context)
在自动配置完成后,调用 ApplicationContext
的 refresh
方法加载并初始化所有 Spring Bean。这包括:
- 扫描注册 Beans。
- 进行依赖注入(Dependency Injection),解决所有 Bean 之间的依赖关系。
- 初始化 Lifecycle Beans,如果你的 Bean 实现了 InitializingBean 接口或者使用了
@PostConstruct
注解,Spring 会在这一步调用它们的初始化方法。
5. 启动嵌入式 Web 服务器(Web 环境)
对于 Web 应用,Spring Boot 会自动启动一个嵌入式的 Web 服务器(如 Tomcat、Jetty 或 Undertow)。这个过程包括加载 Web 相关配置、启动 Web 服务器以及根据配置设置监听端口和上下文路径。
6. 运行 ApplicationRunner 和 CommandLineRunner
提供了接口允许开发者在应用完全启动后执行一些自定义逻辑或初始化任务。这对于执行启动后的操作非常有用,比如加载缓存、检查数据库连接等。
7. 启动完成和确认
Spring Boot 输出日志表明应用程序已成功启动,并准备好处理请求。这条日志不仅确认了启动成功,还提供了关于启动性能的信息,如启动时间,帮助评估应用的性能表现。
8. 处理请求和运行
一旦启动成功,Spring Boot 应用可以开始处理外部请求或执行预定的任务。对于 Web 应用,Spring MVC 通过 DispatcherServlet
处理所有的 HTTP 请求,将它们路由到相应的控制器(@Controller
或 @RestController
)的方法。
9. 优雅关闭(Graceful Shutdown)
当决定停止应用时,Spring Boot 执行清理工作,包括调用 DisposableBean
接口中的 destroy
方法以及优雅地关闭嵌入式 Web 服务器,确保所有请求都被处理完毕后再关闭服务器。
总结
Spring Boot 设计旨在简化开发者的体验,减少配置负担的同时保持灵活性和强大的功能。从引导类到优雅关闭,Spring Boot 提供了一套完整的解决方案,使得构建独立、生产级别的基于 Spring 框架的应用变得更加简单快捷。通过自动配置、内嵌服务器等特性,极大地提高了开发效率,让开发者能够更专注于业务逻辑的实现。此外,Spring Boot 还支持微服务架构,使开发人员能够快速搭建分布式系统,提高系统的可扩展性和维护性。
标签:Web,启动,Spring,流程,配置,Boot,Bean From: https://blog.csdn.net/suran36/article/details/145213587