面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?

1.springboot 是如何管理版本依赖的?

springboot底层使用maven管理依赖,通过控制pom.xml完成细节配置,如下图为一个springboot项目的pom文件截图,但在这当中没有发现有管版本的地方,注意看我们有spring-boot-starter-parent这个父pom,那它这里面有什么呢?

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第1张图片

这个截不完,它主要是标记了一些依赖之间的关系,还有一些项目之间的描述,但它还是没有版本的信息,我们再进入它的spring-boot-dependencies父pom中

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第2张图片

可以看到在spring-boot-dependencies中存在我们默认配置的版本

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第3张图片

总结一下就是

1.springboot底层使用maven管理依赖,通过控制pom.xml完成细节配置,父子关系来在父pom中定义具体框架和版本号

2.提供了很多场景的spring-boot-starter的pom.xml文件,来标准化的引入依赖避免冲突

2.什么是自动配置?

大多数的发明都是为了让人们更好的偷懒所发明的,自动配置也是如此,所加载使用的iar包 如果是比较常见的,spring都提供了默认配置,也就是不像以前一样需要把框架的每一个属性都要配置一编,主要目的是为了简化开发

那springboot是怎么实现自动配置的呢?

下图是一个springboot的启动类,实现自动配置的密码就在@SpingBootApplication这个注解上

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第4张图片

在这里面又有很多注解,我们先看@ComponentScan这个注解,这个注解会让spring去扫描某些包及其子包中所有的类,然后将满足一定条件的类作为bean注册到spring容器容器中。

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第5张图片

@ComponentScan工作的过程:

1. Spring会扫描指定的包,且会递归下面子包,得到一批类的数组

2. 然后这些类会经过上面的各种过滤器,最后剩下的类会被注册到容器中

所以玩这个注解,主要关注2个问题:

第一个:需要扫描哪些包?通过value、backPackages、basePackageClasses这3个参数来控制

第二:过滤器有哪些?通过useDefaultFilters、includeFilters、excludeFilters这3个参数来控制过滤器

这两个问题搞清楚了,就可以确定哪些类会被注册到容器中。

默认情况下,任何参数都不设置的情况下,此时,会将@ComponentScan修饰的类所在的包作为扫描包;默认情况下useDefaultFilters为true,这个为true的时候,spring容器内部会使用默认过滤器,规则是:凡是类上有@Repository、@Service、@Controller、@Component这几个注解中的任何一个的,那么这个类就会被作为bean注册到spring容器中,所以默认情况下,只需在类上加上这几个注解中的任何一个,这些类就会自动交给spring容器来管理了。

然后是@EnableAutoConfiguration这个注解,它的里面又有别的注解,我们来可看@AutoConfigurationPackage

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第6张图片

在AutoConfigurationPackage中它Import了个Registrar类,这个类是帮我们批量导入一系列的自动化配置,批量注入aoc容器当中

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第7张图片

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第8张图片

会到@EnableAutoConfiguration中,它导入了下图的AutoConfigurationImportSelector类,他完成了具体的每一个框架的一些基础的配置

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第9张图片

在这里面有个getCandidateConfigurations方法,它是用于读取某一个框架的具体的配置文件,我们在后面能看到springboot这个他的一个默认的配置文件,如果我们自己不配置的话,它会调用这个默认文件

最后,在最开始的SpringBootApplication注解上面还有一个SpringBootConfiguration注解,这一个注解就是用来标记我们开启自动化配置的开关

面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?_第10张图片

总结一下就是帮我们完成一系列重复性配置的工作,主要springboot通过在启动类上添加注解@SpringBootApplication 完成自动配置,内部完成了读取每个jar包下的META-INF/spring.factories和spring-boot-autoconfigure中的默认配置

3.什么是起步依赖?

指的是各种starter重点是pom.xml,其中包含了框架所需要的其他依赖,不需要我们手动配置了。

你可能感兴趣的:(面试题,springboot,spring,boot,java,后端)