SpringBoot的启动机制

53 篇文章 0 订阅
30 篇文章 2 订阅

两大原理

在这里插入图片描述

SpringBootApplication原理

@SpringBootApplication注解的原理与@SpringBootConfiguration、@ComponentScan、@EnableAutoConfiguration等注解有关。

在这里插入图片描述

@SpringBootConfiguration

与@SpringBootConfiguration注解原理相关的是@Configuration和一些其他的元注解。

SpringBoot能去除xml配置的原因就在于使用了@Configuration这个注解。该注解的作用就是将当前类声明为配置类。同时还可以使用@bean注解将类以方法的形式实例化到spring容器,其中方法名即为实例名。

@ComponentScan

在这里插入图片描述
@ComponentScan的作用就是扫描当前包以及子包,将有@Component,@Controller,@Service,@Repository等注解的类注册到容器中,以便调用。

注解@Mapper不是这个注解扫描的,而是在启动类上加@MapperScan。

@EnableAutoConfiguration

在这里插入图片描述
@Import(AutoConfigurationImportSelector.class)包含一个selectImports()方法,该方法包括getAutoConfigurationEntry()方法,该方法读取classpath下的META-INF/spring.factories文件的配置,将相应的bean的配置项读取出来,通过反射机制实例化为配置文件,然后注入spring容器。

SpringApplication.run()原理

在这里插入图片描述
创建SpringApplication实例化对象后调用执行run方法。

创建SpringApplication实例化对象

获取应用类型

包含三种类型:

  1. NONE: 非web应用,即不会启动服务器。
  2. SERVLET: 基于servlet的web应用。
  3. REACTIVE: 响应式web应用(暂未接触过)。

Servlet是一种运行在Web服务器或应用服务器上的程序,作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。它是Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。

获取初始化器

在META-INF/spring.factories配置文件里获取初始化器,然后实例化、排序后再设置到initializers属性中。

获取监听器

在META-INF/spring.factories配置文件里获取监听器,然后实例化。

定位main方法

遍历获取main方法所在的类并且返回对应的位置。

调用执行run方法

在这里插入图片描述

  1. 启动监听器
  2. 创建上下文
  3. 开启日志
  4. 读取配置文件

参考资料5分钟快速记springboot启动原理思维导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值