当前位置: 代码网 > it编程>编程语言>Java > Spring Boot 启动流程解析

Spring Boot 启动流程解析

2024年12月06日 Java 我要评论
spring boot 是一个简化的 spring 应用开发框架,它以 “约定优于配置” 的理念,为开发者提供了开箱即用的功能。在 spring boot 的运行过程中,spr

spring boot 是一个简化的 spring 应用开发框架,它以 “约定优于配置” 的理念,为开发者提供了开箱即用的功能。在 spring boot 的运行过程中,springapplication.run() 方法是整个启动流程的核心,本文将详细剖析其内部实现,帮助你深入理解 spring boot 的启动机制。

1. spring boot 启动的主要步骤

spring boot 的启动由 springapplication.run() 方法驱动,其核心代码如下:

springapplication.run(application.class, args);

这个方法的运行过程可以分为以下主要步骤:

初始化 springapplication
确定应用类型(servlet/reactive/非 web),加载环境和监听器。

准备运行环境
加载 application.propertiesapplication.yml 配置,解析命令行参数,准备 configurableenvironment

创建应用上下文
根据应用类型创建对应的 applicationcontext,例如:

annotationconfigservletwebserverapplicationcontext(servlet 应用)reactivewebserverapplicationcontext(reactive 应用)

刷新上下文
完成 bean 的加载、依赖注入、aop 代理等操作,启动内嵌的 web 服务器(如果需要)。

通知监听器和执行扩展点
触发生命周期事件,执行 commandlinerunnerapplicationrunner

启动完成
应用准备好后,触发 applicationreadyevent,正式进入运行状态。

2. 核心组件解析

2.1 环境准备

spring boot 通过 configurableenvironment 统一管理环境变量、配置文件、系统属性等信息。

加载顺序

  • 系统属性(如 -d 参数)。
  • 环境变量(system.getenv())。
  • 配置文件(application.propertiesapplication.yml)。
  • 命令行参数(args)。

扩展点
可以通过实现 environmentpostprocessor 来自定义环境变量加载逻辑。

2.2 上下文创建

spring boot 根据应用类型选择合适的 applicationcontext

应用类型上下文类型说明
servlet 应用annotationconfigservletwebserverapplicationcontext默认的 web 应用上下文。
reactive 应用reactivewebserverapplicationcontext响应式编程应用上下文。
非 web 应用genericapplicationcontext普通 java 应用上下文。

上下文创建时,还会完成以下工作:

  • 注册基础组件,如 environmentresourceloader
  • 加载 bean 定义,准备好应用的依赖图。

2.3 bean 加载与初始化

扫描与加载
通过 @componentscan 扫描包路径,加载所有标注了 @component@service@repository@controller 等注解的类。

生命周期回调
初始化过程中,spring 会调用以下接口或注解:

  • initializingbeanafterpropertiesset()
  • @postconstruct 方法。

aop 代理
根据 @enableaspectjautoproxy 自动为符合条件的 bean 创建代理。

2.4 自动配置

spring boot 的 “魔法” 很大程度上来自于自动配置机制,通过 @enableautoconfiguration 实现。

实现原理
spring boot 使用 spring.factories 文件加载所有自动配置类。

核心类
@conditionalonclass@conditionalonproperty 等条件注解,控制是否加载自动配置。

扩展点
可以通过实现 autoconfigurationimportfilter 自定义自动配置类的加载行为。

3. 生命周期事件

spring boot 在启动过程中会触发以下事件,开发者可以通过监听器进行自定义逻辑处理:

例如,监听 applicationreadyevent

事件名称触发时机
applicationstartingevent应用启动开始。
applicationenvironmentpreparedevent环境变量准备完成。
applicationpreparedevent上下文准备完成但未刷新。
applicationstartedevent上下文刷新完成。
applicationreadyevent应用完全启动,准备好接收请求。
applicationfailedevent启动失败。

例如,监听 applicationreadyevent

@component
public class myapplicationreadylistener implements applicationlistener<applicationreadyevent> {
    @override
    public void onapplicationevent(applicationreadyevent event) {
        system.out.println("application is ready!");
    }
}

4. 启动异常处理机制

spring boot 使用 handlerunfailure 方法集中处理启动过程中的异常:

处理方式

  • 打印错误日志。
  • 调用注册的 springapplicationrunlistenerfailed() 方法。
  • 关闭应用上下文,释放资源。

常见异常

  • beandefinitionstoreexception:bean 定义加载错误。
  • unsatisfieddependencyexception:依赖注入失败。
  • illegalstateexception:上下文状态非法。

5. 总结

spring boot 的启动流程高度模块化,既有固定的主流程,又为开发者提供了丰富的扩展点。主要流程可总结为:

  • 准备阶段:初始化 springapplication,加载环境和监听器。
  • 上下文加载:创建 applicationcontext,加载配置和 bean 定义。
  • 上下文刷新:完成 bean 的依赖注入和初始化,启动内嵌服务器。
  • 扩展与回调:通知监听器、调用 runner 接口、触发生命周期事件。

通过理解 spring boot 启动流程,你可以更高效地调试问题、优化启动性能,甚至自定义启动行为,从而更好地掌控你的应用。

到此这篇关于spring boot 启动流程详解的文章就介绍到这了,更多相关spring boot 启动流程内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com