SpringBoot依赖管理和自动配置

874 阅读2分钟

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」。

依赖管理

我们打开SpringBoot项目的pom.xml文件,可以看到和之前的maven项目几乎相同,但是同以往不一样的是,这里的依赖都是一个个starter并没有显示具体引用了哪些jar包,而且这里依赖了一个<parent>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

父项目依赖

点击进入父依赖中(idea ctrl + 左击), 还是没有具体依赖,再往上查看父依赖,最顶层我们看到了这里定义了大量的具体依赖,并且通过<properties>定义了所有的依赖版本号。

这里涉及到maven的知识,在此不做详细介绍,感兴趣可以看看这里

版本控制

SpringBoot项目通过父依赖统一管理项目中所有的jar包版本,项目在引入依赖的时候就不需要具体指定版本了。而且当我们引入一个starter的时候,会自动引入相关的jar包,无需我们自己去一个个引入,考虑版本兼容问题,给我们整合第三方依赖带来了便捷。

总结

  • 引入的starter<parent>中集中声明了项目中几乎所有依赖包以及版本号。具体使用时只需要直接引入依赖,不需要指定版本号,自动版本仲裁
  • 如需要引入父依赖中未指定版本的依赖,需要指定版本,并且如果在当前项目中指定版本,就近原则,会覆盖父依赖中的版本,以当前指定版本号为准
  • spring-boot-starter-xxx命名为官方提供的starter,而第三方机构提供的starter一般命名为xxx-spring-boot-starter

自动配置

根据引入的starterSpringBoot项目启动后会自动加载配置,引入web开发的starter,会自动配置好web开发中的所有常见场景,比如tomcat容器,以及字符编码,视图解析器。并且配置了默认的包扫描,自动扫描主程序所在包,这也是为什么我们不需要再向原来那样指定包扫描。当然我们也可以指定扫描指定的包 @SpringBootApplication(scanBasePackages= "com.yang" )或者@ComponentScan指定扫描路径

以往MVC下自己手动配置的东西,在SpringBoot中,要么默认给我们配置好了,要么我们可以通过注解简单的完成相同的效果。非常的方便。

总结

  • 自动配置了需要的场景容器
  • 自动配置了包扫描结构(启动类所在包)
  • 自动加载配置文件,生成配置对象
  • 按需加载所有的配置项 具体场景可查看
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-autoconfigure</artifactId>
  <version>2.3.2.RELEASE</version>
  <scope>compile</scope>
</dependency>

image.png