20240709每日后端--------Spring Boot的启动流程

目标

了解Spring Boot的启动流程

步骤

每个 Spring Boot 项目都有一个用 @SpringBootApplication 注释的主启动类。


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

通过直接检查 SpringApplication.run 方法,你会发现整个启动过程分为两部分:SpringBootApplication构造函数和run方法的执行。

public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {  
 return new SpringApplication(primarySources).run(args);
}

核心注释

当您打开 @SpringBootApplication 注释时,您会发现一堆注释,但重要的是要关注三个核心注释:

@SpringBootConfiguration


它是 @Configuration 注释的包装器。它通过JavaConfig配置bean,将当前类标记为配置类。

@EnableAutoConfiguration

打开 @EnableAutoConfiguration 注解可以看到两个核心注解:@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage

@AutoConfigurationPackage与 @Component 注释的含义类似。一种用于手动添加注解来加载自动配置类,另一种用于扫描指定路径来注入bean。 @AutoConfigurationPackage 用于在单个路径中加载多个自动配置类时。该注解无需为每个类单独添加 @Import ,从而更方便地简单地导入包路径。 @ComponentScan 对于自定义包路径很有用,例如,当某些 Bean 与 SpringBootApplication 不在同一路径中时。

@Import(AutoConfigurationImportSelector.class)

@Import(AutoConfigurationImportSelector.class) 涉及 AutoConfigurationImportSelector 类,特别是它的 getCandidateConfigurations() 方法。此方法使用 SpringFactoriesLoader.loadFactoryNames() 查找并加载 META-INF/spring.factories 文件中列出的所有自动配置类。

@ComponentScan

1、默认情况下,它扫描当前包及其子包。用 @Component 、 @Controller 、 @Service 、 @Repository 等注解的类注册在容器中供使用。


上面的注释只是将必要的类加载到类路径中。获取类并将其转换为 bean 的实际过程发生在 run 方法中。因此,在回答这方面的问题时,建议先提及核心注释。主要的启动流程还是围绕SpringBootApplcation类的构造函数和run方法展开。

概括

Spring Boot应用程序启动的总体步骤。
1、整个Spring框架的启动分为两部分: constructing a SpringApplication object 和执行 run 方法。
2、核心注解 @SpringBootConfiguration 表示启动类是一个配置类。 @EnableAutoConfiguration 通过其内部 @Import 注释 AutoConfigurationImportSelector.class 实现自动配置。 @ComponentScan 默认情况下扫描当前目录及其子目录中的 bean。
3、构造函数:

  • 根据servlet类是否加载来判断是否为Web环境。
  • 检索所有初始化器,扫描 META-INF/spring.factories 下的所有
    ApplicationContextInitializer 子类并通过反射获取实例,以在Spring实例启动前后执行一些回调操作。
  • 检索所有监听器,与上面类似,扫描配置并加载相应的类实例。
  • 找到主要方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值