参考:https://www.cnblogs.com/hhcode520/p/9450933.html
https://www.jianshu.com/p/88eafeb3f351
一、起步依赖原理分析
spring-boot-starter-parent分析:
引入了springboot的起步依赖,项目才是一个springboot项目。
1、按住Ctrl进入 spring-boot-starter-parent 中,再点击进入 spring-boot-dependencies 中,在 spring-boot-dependencies 中定义了很多依赖的版本。xml配置如下(只摘抄了部分重点配置):
2、因此,从上面的spring-boot-dependencies的pom.xml中我们可以发现,一部分依赖的版本、依赖管理、插件管理已经定义好了,所以我们的SpringBoot工程继承了spring-boot-starter-parent后就已经具备版本锁定了。
- 一部分依赖的版本,已经在启动依赖中定义好了。
- 因此,我们在引入部分依赖时,不需要再写版本号了。
- 所以起步依赖的作用就是 对依赖的版本号进行 传递。
spring-boot-starter-web分析:
这个是 spring-boot-starter-web 的pom内容:
spring-boot-starter-web ,就是把web功能需要的所有依赖进行了 “打包” ,我们只需要引入这个功能对应的starter,就相当于是引入了多个依赖。
同样的: 这个功能starter,也是依赖的 spring-boot-dependencies,功能starter的依赖版本也是被锁定了。
二、自动装配原理分析
在启动类上的注解@SpringBootApplication,中包含有3个注解。
@EnableAutoConfiguration
作用就是从classpath中搜寻所有的META-INF/spring.factories
配置文件,spring.factories
中是自动配置类的全路径,通过反射 将这些自动配置类 生成对应的标有@Configuration注解的配置类,加载到IoC容器中。
哪些功能类能生效?需要的条件:
- 看pom.xml 是否有对应功能的jar包;
- 然后根据 自动配置类 中的
@Conditional
注解决定哪些配置需要配置,哪些不需要配置。