SpringBoot自动装配
来自 最通俗易懂,最详细的springboot自动配置原理解析
Starter 依赖管理
spring-boot-starter-parent
在pom.xml中,会存在一个父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
该项目用来做依赖管理,托管子项目,点击进去还存在一个父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.5</version>
</parent>
再次点击进去会发现,里面管理了所有依赖的版本。
<properties>
<activemq.version>5.16.1</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.88</appengine-sdk.version>
<artemis.version>2.15.0</artemis.version>
<aspectj.version>1.9.6</aspectj.version>
<assertj.version>3.18.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
................
所以得到一个结论:
spring-boot-dependencies存放着SpringBoot的核心依赖,管理springboot应用里面的所有依赖版本。所以以后引入一些SpringBoot依赖的时候,不需要指定版本,但是没有出现在spring-boot-dependencies中的依赖需要手动导入并声明版本号。
spring-boot-starter-web
再回到pom.xml中,pom.xml中还导入了如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
怎么理解spring-boot-starter-web呢?
可以拆分为两部分来看spring-boot-starter 和web
spring-boot-starter :spring的场景启动器
springboot将所有的功能场景都抽取出来,做成一个个starters(启动器),只需要在项目中引入这些starters相关场景的所有依赖都会导入进来,而且版本会自动控制。
Starters官方解释为一系列依赖描述的组合,可以通过导入这些Starters就会有相应的依赖
自动配置
@SpringBootApplication
标注一个类为SpringBoot的主程序类,每次启动都要通过这个主程序来启动
@SpringBootApplication
public class Springboot01HelloworldQuick03Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01HelloworldQuick03Application.class, args);
}
}
结论:springboot所有自动配置都在启动的时候扫描并加载。