首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

springboot 启动原理详解

springboot 启动原理

springboot 常见的启动写法如下:

然后我们的程序就可以和 main 方法一样,直接启动运行了。

但是这一切是如何实现的呢?

今天我们一起来学习一下 springboot 的启动原理。

SpringApplication.run 方法

main 方法整体看起来看起来平平无奇。

平平无奇

SpringApplication.run() 让我意识到问题并不简单,我们一起看一下 run 里面到底是如何实现的。

这里调用了另外一个方法:

这里实际上是创建了 SpringApplication 对象,并且执行 run 方法。

SpringApplication

我们简单看一下这个对象。

这里主要是针对 spring 的初始化:

设置了一些初始化实现、监听器等,此处不做详细展开。

run 方法

构建完成之后,需要调用对应的 run 方法,这个方法是比较复杂的,不过也不用太紧张,有兴趣的可以深入研究一下。

我们这里大概梳理一下启动过程的步骤:

启动流程@SpringBootApplication 注解

看完了静态方法,我们来看一下另一个注解 。

注解定义

我们省略掉对应的方法属性,发现实际上这个注解是由 3 个注解组合而成:

其中 是完全等价于 的,此处应该是为了和 spring 的注解做区分。

所以一开始的实现,等价于:

当然了, springboot 的理念就是极简配置,能少写一行代码,就少写一行代码!

@Configuration 注解

这里的 大家应该并不陌生,spring 中可以使用下面的写法,替代 spring xml 的配置写法:

@ComponentScan 注解

的功能其实就是自动扫描并加载符合条件的组件(比如 和 等)或者bean定义,最终将这些bean定义加载到IoC容器中。

我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明 所在类的package进行扫描。

ps: 所以我们的 Application 启动类一般是放在根目录,这样连扫描的包也省略掉了。

@EnableAutoConfiguration 注解

这个注解我们放在最后讲解,因为它为 springboot 带来了更多的便利性。

注解定义

这个注解实际上是一个组合注解 @AutoConfigurationPackage + @Import

@AutoConfigurationPackage:自动配置包

@Import: 导入自动配置的组件

我们来看一下这 2 个注解:

@AutoConfigurationPackage 注解

这个注解主要是通过 @Import 注解导入了 类。

实现如下:

它其实是注册了一个Bean的定义。

,它其实返回了当前主程序类的同级以及子级的包组件。

@Import(EnableAutoConfigurationImportSelector.class)

我们来看一下另外一个注解,@Import(EnableAutoConfigurationImportSelector.class)。

EnableAutoConfigurationImportSelector 实现如下:

这个方法一眼看上去也是平平无奇,因为核心实现都在父类中。

最核心的方法如下:

我们用过的各种 springboot-starter,使用起来引入一个 jar 就可以使用了。

都要归功于下面这个方法:

这里实际上会去解析一个文件:

这也就是我们在开发自己的 springboot-starter 时,为什么需要把自己的启动类放在 文件中的原因,这样就可以被 springboot 加载,并且生效了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201213A0337C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券