spring和spring boot的启动流程

Spring 

Spring 框架的启动过程涉及到多个模块和组件,以下是 Spring 框架的主要启动流程:

  1. 加载配置文件:

    • Spring 框架通常会通过 XML 配置文件或注解方式进行配置。在启动过程中,Spring 首先加载这些配置文件,解析配置信息,构建应用上下文。
  2. 创建应用上下文(ApplicationContext):

    • Spring 启动后,会创建一个应用上下文对象,该对象是 Spring 框架的核心容器,负责管理和维护 Bean 对象、处理事件、执行 AOP 等操作。
  3. 扫描并注册 Bean 定义:

    • Spring 会扫描指定包路径下的类,识别带有 @Component@Service@Repository@Controller 等注解的类,并注册这些类的 Bean 定义。
  4. 实例化和依赖注入:

    • Spring 容器会实例化被注册的 Bean,并进行依赖注入。这包括通过构造函数、Setter 方法或字段注入方式将相关 Bean 注入到目标 Bean 中。
  5. 执行生命周期回调:

    • Spring 通过回调机制执行 Bean 的初始化和销毁方法。这包括 @PostConstruct@PreDestroy 注解、InitializingBeanDisposableBean 接口等。
  6. 触发事件通知:

    • Spring 框架支持事件驱动模型,容器会触发各种事件通知,开发者可以通过监听器(ApplicationListener)来处理这些事件,如上下文初始化完成事件、上下文关闭事件等。
  7. 启动 Spring 容器:

    • 容器启动后,开始正式提供服务。应用程序可以通过从容器中获取 Bean 对象来调用业务逻辑。
  8. 处理 AOP:

    • 如果使用了 AOP(面向切面编程),Spring 会在启动时生成代理对象,并将代理对象关联到目标 Bean 上。这样在运行时,AOP 操作可以被执行。
  9. Web 应用初始化(仅适用于 Web 项目):

    • 对于 Spring Web 项目,容器还会初始化 Web 应用相关的配置,如 DispatcherServlet、HandlerMapping、ViewResolver 等。
  10. 执行自定义逻辑:

    • 开发者可以通过编写自定义的初始化逻辑或监听器,在 Spring 启动过程中执行特定的业务逻辑。
  11. 完成启动过程:

    • 当上述步骤完成后,Spring 容器启动过程就算完成了,此时应用程序可以开始接收请求,处理业务逻辑。

总体而言,Spring 的启动流程是一个反射、依赖注入、生命周期管理等多个方面交织在一起的复杂过程。它通过各种配置和扫描机制,实现了组件的自动注册和管理。

SpringBoot 

Spring Boot 的启动流程相对于传统的 Spring 框架来说更加简化和自动化。以下是 Spring Boot 的主要启动流程:

  1. 执行 main 方法:

    • Spring Boot 应用的启动入口是 main 方法,通常包含 SpringApplication.run(Application.class, args)
  2. 创建 SpringApplication 对象:

    • SpringApplication 是 Spring Boot 的启动类,负责启动应用。在 main 方法中创建 SpringApplication 对象,并传入应用主类和启动参数。
  3. 解析启动参数:

    • SpringApplication 解析命令行参数,如 --server.port=8080,并设置相应的配置。
  4. 推断应用类型:

    • 推断应用类型,即判断是 Web 应用还是非 Web 应用。通过类路径、类的存在性等方式进行判断。
  5. 创建应用上下文(ApplicationContext):

    • 根据应用类型创建对应的 ApplicationContext,可以是 AnnotationConfigApplicationContext(非 Web)或 AnnotationConfigServletWebServerApplicationContext(Web)。
    • 在初始化应用上下文的过程中,Spring Boot 会扫描类路径上的所有类,包括第三方 Starter 中的类。
  6. 初始化应用上下文:

    • 根据类路径中的类和配置,初始化应用上下文。这包括注册 Bean、扫描组件、加载配置文件等。
    • Spring Boot 在初始化应用上下文的过程中,会处理所有的配置类和组件扫描。这时,如果引入了第三方 Starter,Starter 中的自动配置类会被触发。
    • 第三方 Starter 通常包含了一些自动配置类,这些类通过条件注解(@ConditionalOn...)来判断是否满足特定的条件,如果满足,则进行相应的自动配置。
  7. 执行 SpringApplicationRunListeners:

    • 执行 SpringApplicationRunListeners 中的监听器,通知它们应用正在启动。
    • 在执行 SpringApplicationRunListeners 中的监听器时,如果引入了第三方 Starter,其监听器也会被执行。
  8. 加载应用上下文:

    • 调用 refresh() 方法加载应用上下文,启动 Spring 容器。
    • Starter 中可能包含了一些默认的配置信息,这些配置信息会被加载到应用上下文中。这可以包括默认的 Bean 配置、属性配置等。
  9. 执行 SpringApplicationRunListeners:

    • 再次执行 SpringApplicationRunListeners 中的监听器,通知它们应用已经启动。
  10. 运行应用:

    • 根据应用类型,决定如何运行应用。Web 应用启动内嵌的 Tomcat、Jetty 等容器,非 Web 应用直接执行 main 方法。
  11. 关闭应用上下文:

    • 当应用关闭时,执行 SpringApplicationRunListeners 中的监听器,通知它们应用即将关闭。
  12. 执行关闭钩子:

    • 执行 JVM 关闭钩子,确保资源被正确释放。

这是一个简化的 Spring Boot 启动流程,实际上其中还包括了很多细节,如自动配置、条件注解的处理、外部化配置等。Spring Boot 借助自动配置和约定大于配置的原则,简化了开发者的工作,使得应用能够更轻松地启动和运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值