SpringBoot-依赖管理和自动配置
1.依赖管理
1.什么是依赖管理
- spring-boot-starter-parent 还有父项目, 声明了开发中常用的依赖的版本号
- 并且进行 自动版本仲裁 , 即如果程序员没有指定某个依赖 jar 的版本,则以父项目指 定的版本为准
2.修改自动仲裁/默认版本号
- 需求说明: 将 SpringBoot mysql 驱动修改成 5.1.49
- 查看 spring-boot-dependencies.pom 里面规定当前依赖的版本对应的 key , 这里是 mysql.version
- 修改 pom.xml 重写配置, 当更新 Maven 时,就依赖到新的 mysql 驱动.
<!--这里我们可以指定mysql.version-->
<properties>
<mysql.version>5.1.49</mysql.version>
</properties>
<!--我们自己指定mysql/驱动版本- 修改版本仲裁
1. 方式1:显示的导入mysql依赖, 并明确的指定<version>
2. 方式2.在自己的pom.xml文件中, 在<properties> 中指定mysql的key
形如:
<properties>
<mysql.version>5.1.49</mysql.version>
</properties>
3. 为什么可以达到修改版本仲裁: 根据依赖就近优先原则.
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.49</version>-->
<!-- <mysql.version>8.0.26</mysql.version> 命名方式和springboot自动仲裁的命名方式一样,因此这里可以省略-->
<!--<version>${mysql.version}</version>-->
</dependency>
2.starter 场景启动器
1.starter 场景启动器基本介绍
- 开发中我们引入了相关场景的 starter,这个场景中所有的相关依赖都引入进来了,比如 我们做 web 开发引入了,该 starter 将导入与 web 开发相关的所有包
- 依赖树 : 可以看到 spring-boot-starter-web ,帮我们引入了 spring-webmvc,spring-web 开发模块,还引入了 spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些 场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发 效率
- 所有场景启动器最基本的依赖就是 spring-boot-starter , 前面的依赖树分析可以看到,这个依赖也就是 SpringBoot 自动配置的核心依赖
2.官方提供的 starter
1.地 址
2.介绍
- 在开发中我们经常会用到 spring-boot-starter-xxx ,比如 spring-boot-starter-web,该场景是用作 web 开发,也就是说 xxx 是某种开发场景。
- 我们只要引入 starter,这个场景的所有常规需要的依赖我们都自动引入。
- SpringBoot2 支 持 的 所 有 场 景 如 下 : https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
3.第三方 starter
- SpringBoot 也支持第三方 starter
- 第三方 starter 不要从 spring-boot 开始,因为这是官方 spring-boot 保留的命名方式的。 第三方启动程序通常以项目名称开头。例如,名为 thirdpartyproject 的第三方启动程序项 目通常被命名为 thirdpartyproject-spring-boot-starter。
3. 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器
3.自动配置
1.自动配置基本介绍
- SSM 整合时,需要配置 Tomcat 、配置 SpringMVC、配置如 何扫描包、配置字符过滤器、配置视图解析器、文件上传等[如图],非常麻烦。而在 SpringBoot 中,存在自动配置机制,提高开发效率
2.SpringBoot 自动配置了哪些?
- 自动配置 Tomcat
- 自动配置 SpringMVC
- 自动配置 Web 常用功能: 比如字符过滤器, 提示: 通过获取 ioc 容器,查看容器创 建 的 组 件 来 验 证 , 修 改src\main\java\com\llp\MainApp.java
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);
String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
//查看容器里面的组件名称
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
}
}
- 自动配置 : 默认扫描包结构 !!! , 官方文档 :
3.如何修改默认配置
1.如何修改默认扫描包结构
- 需求:要求能扫描 com.llp包下的 HelloController.java 应该如何处理?
- 修改HelloController.java所在包的位置,故意让其不在主启动类所在的包及其子包下
进行测试我们发现是不能访问到HelloController的,因为SpringBoot默认的包扫描是主启动类所在包及其子包,而HelloController.java不在扫描的包内,无法注入到Spring容器中,SpringMVC也没有相关的路径映射配置因此是找不到的。由此引入一个问题,如何修改SpringBoot默认的包扫描机制呢
3. 修改 MainApp.java, 增加扫描的包, 并完成测试
// 直接在 SpringBootApplication 注解后指定扫描的包,在该报下的组件会被注入到spring容器中
@SpringBootApplication(scanBasePackages = {"com"})
public class MainApp {
public static void main(String[] args) {
ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);
String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
}
}
修改后,再次测试
2.resources\application.properties 配置大全
- SpringBoot 项目最重要也是最核心的配置文件就是 application.properties,所有的框架配 置都可以在这个配置文件中说明,在开发中有不熟悉的配置可以参考
- 地址:
3.resources\application.properties 修改配置
● 各 种 配 置 都 有 默 认 , 可 以 在 resources\application.properties 修 改 , application.properties 文件我们可以手动创建
#默认 server.port=8080
server.port=10000
#比如: 默认 spring.servlet.multipart.max-file-size=1MB #该属性可以指定 springboot 上传文件大小的限制
# 默认配置最终都是映射到某个类上,比如这里配置会映射到 MultipartProperties
# 把光标放在该属性,ctrl+鼠标左键 就可以定位该配置映射到的类
spring.servlet.multipart.max-file-size=10MB
4.resources\application.properties 自定义配置
● 还可以在 properties 文件中自定义配置,通过@Value(“${}”)获取对应属性值
#application.properties 文件 my.website=https://www.baidu.com
//某个 Bean
@Value("${my.website}") private String bdUrl;
4.SpringBoot 在哪配置读取 application.properites
1、打开 ConfigFileApplicationListener.java , 看一下源码
2、测试, 如果我们把 application.properties 放在 resources\config 目录下, 你会发现依然 是管用的
5.自动配置 遵守按需加载原则
1.基本说明
1.自动配置遵守按需加载原则:也就是说,引入了哪个场景 starter 就会加载该场景关联的 jar 包,没有引入的 starter 则不会加载其关联 jar
2.SpringBoot 所 有 的 自 动 配 置 功 能 都 在 spring-boot-autoconfigure 包 里 面
3.在 SpringBoot 的 自 动 配 置 包 , 一 般 是 XxxAutoConfiguration.java, 对 应 XxxxProperties.java, 如图
2.实例演示
- 以 MultipartProperties , MultipartAutoConfiguration 和 application.properties 来说明