springboot启动流程及原理

8 篇文章 0 订阅

springboot启动入口类

@SpringBootApplication
public class SpringBootWebApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringBootWebApplication.class);
        application.run(args);
    }
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

以上代码很容易看出哪些是关键,当然是@SpringBootApplication和application.run()分别是springboot加载配置和启动,下面详细说明这两块。
其中@Configuration(@SpringBootConfiguration中其实用的也是@Configuration);@EnableAutoConfiguration;@ComponentScan三个是最重要的注解,@SpringBootApplication整合了三个注解使用者写起来看起来都比较简洁。

@Configuration
它就是JavaConfig形式的Spring Ioc容器的配置类使用的那个@Configuration,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。如下案例说明xml和注解实现bean的定义

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
       default-lazy-init="true">
       <!--bean定义-->
</beans>

@EnableAutoConfiguration

@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@EnableAutoConfiguration简单的说它的作用就是借助@Import的支持,收集和注册特定场景相关的bean定义。其中,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。借助于Spring框架原有的一个工具类:SpringFactoriesLoader的支持很智能的自动配置:
在这里插入图片描述
SpringFactoriesLoader其主要功能就是从指定的配置文件META-INF/spring.factories加载配置。将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器

启动流程RUN概述
SpringBoot的启动逻辑在SpringApplication这个类中,通过构造一个SpringApplication并调用run方法启动SpringBoot应用程序。SpringBoot启动后的主要流程:

  1. 设置webApplicationType(web应用类型)
    webApplicationType是启动流程中一个比较重要的属性,SpringBoot根据它的类型来创建Environment对象和应用上下文对象(ApplicationContext)

  2. 准备应用上下文环境(Environment)
    根据上一步推断的webApplicationType创建不同类型的Environment,并且将用户的profile文件读取到Environment中

  3. 读取profile

  4. 创建并配置应用上下文对象(ApplicationContext)
    根据webApplicationType创建不同实现的ApplicationContext

  5. 刷新应用上下文对象(refresh)
    AbstractApplicationContext抽象类定义了上下文对象初始化核心流程,SpringBoot以BeanFactoryPostProcessor的方式实现包扫描、自动配置,将Bean预先加载成BeanDefinition后并实例化

  6. 后续处理
    发布应用已启动事件并且调用容器中的Runner

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是基于 Spring 框架的一个快速开发框架,它可以为我们快速地搭建一个独立的、可运行的、生产级别的 Spring 应用程序。下面是 Spring Boot 启动流程的简单原理: 1. 加载 Spring Boot 配置文件:Spring Boot 会首读取 application.properties 或 application.yml 文件中的配置,这些配置文件位于项目的 classpath 下,可以通过在这些文件中设置属性来配置 Spring Boot 应用程序。 2. 加载 Spring Boot 的启动类:Spring Boot 的启动类是一个特殊的类,它包含了 main 方法,用于启动 Spring Boot 应用程序。在启动类中,会使用 SpringApplication.run() 方法来启动 Spring Boot 应用程序。 3. 创建 Spring 应用上下文:Spring 应用上下文是 Spring 框架的核心容器,它负责管理 Spring Bean 的生命周期和依赖注入。在创建 Spring 应用上下文时,会根据配置文件中的信息和启动类中的注解等信息来加载 Spring Bean。 4. 执行 Spring Boot 的自动配置:Spring Boot 通过自动配置来减少开发人员的工作量,它会根据 classpath 中的 jar 包、Bean 的注解以及配置文件中的信息等自动配置 Spring 应用程序。 5. 启动 Spring Boot 应用程序:在完成以上步骤后,Spring Boot 应用程序就启动了,它会监听来自客户端的请求,并将请求转发给对应的 Controller 处理。 总之,Spring Boot 通过自动化配置和约定大于配置的原则,让开发者可以更加专注于业务逻辑的实现,而不需要过多关注框架本身的配置和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值