spring boot 二:自动配置原理
1 SpringBoot特点
1.1 依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
parent父项目是来做依赖管理的,即写了父项目的版本号,如2.5.4,那么后面的依赖,不要写版本号了,比如:
依赖管理中,spring-boot-starter-web的父项目:
再点进去:
几乎声明了所有开发中常用的依赖的版本号
直接复制这段到依赖的配置中去:
无需关注版本号,自动版本仲裁
要修改仓库,直接网址搜索mvn re来搜索mav仓库
1.查看spring-boot-dependencies里面规定当前依赖的版本用的key
2.在当前项目里面重写配置
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
1.见到很多spring-boot-starter-* :*代表某种场景
2.只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
3.推荐命名不要以spring-boot开头,最好是thirdpartyproject-spring-boot-starter
4.见到的 *-spring-boot-starter: 第三方为我们简化开发的场景启动器
5.所有场景启动器最底层的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.4</version>
<scope>compile</scope>
</dependency>
2 自动配置
自动配好Tomcat:
引入Tomcat依赖;配置Tomcat
自动配好SpringMVC
引入SpringMVC全套组件;自动配好SpringMVC常用组件(功能)
package com.xiaoxu.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/*
* 主程序类
* @SpringBootApplication: 这是一个SpringBoot应用
* */
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
//1,返回我们IOC容器
ConfigurableApplicationContext run=SpringApplication.run(MainApplication.class,args);
//2,查看容器里面的组件
String[] names=run.getBeanDefinitionNames();
for(String i:names){
System.out.println(i);
}
}
}
组件例如:
重启main查看如下:
tips:中文没有乱码,是因为组件characterEncodingFilter
自动配好web常见功能,如:字符串编码问题;SpringBoot帮我们配好了所有web开发常见的场景
spring mvc中,视图解析器:viewResolver,还比如文件上传解析器:multipartResolver
包结构:
默认的包结构:主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,无需以前的包扫描配置
如果希望在主程序外面也可以配置好,找到主程序的注解@SpringBootApplication:
想要改变扫描路径,@SpringBootApplication(scanBasePackages = “com.xiaoxu”),或者@ComponentScan指定扫描路径
比如:
依然能够访问到:
@SpringBootApplication(scanBasePackages = "com.xiaoxu")
//等同于下面3个注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.xiaoxu")
各种配置拥有默认值,默认配置最终都是映射到MultipartProperties;配置文件的值最终会绑定到每个类上,这个类会在容器中创建对象
按需加载所有自动配置项
非常多的starter,引入了哪些场景这个场景的自动配置才会开启,SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面