自动配置特性
文章目录
-
-
引入Tomcat依赖 —> 这个属于依赖管理
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
- 该依赖(tomcat场景启动器)是我们引入web场景启动器的时候引入的
-
-
- 配置Tomcat
-
- 引入SpringMVC全套组件
-
- 自动配好SpringMVC常用组件
- 比如 : dispatcherServlet
- 前端控制器 —> 所有的请求都是要先发送到前端控制器的
- 比如 : characterEncodingFilter
- 字符编码过滤器 —> 防止POST参数乱码和GET请求中文乱码
- 比如 : dispatcherServlet
- 自动配好Web常见功能,如:字符编码问题
- 自动配好SpringMVC常用组件
SpringBoot帮我们配置好了所有web开发的常见场景 —> 我们只需要负责引入一个场景启动器, 然后SpringBoot会帮我们引入所有Web场景的依赖, 还会对所有的常用组件(常用功能)进行一个配置
-
- 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
- 无需以前的包扫描配置
- 想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.atguigu”) 或者@ComponentScan 指定扫描路径
- 因为@ComponentScan不是一个可重复注解, 而@SpringBootApplication注解中其实就是@ComponentScan以及其他注解合成的, 所以这里会报错, 后面我们会讲解如何在使用@SpringBootApplication注解的基础上一同使用@ComponentScan注解
-
- 或者@ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
-
各种配置拥有默认值
-
我们可以到application.properties文件中看对应配置的默认值
- 如文件上传的默认最大容量 :
spring.servlet.multipart.max-file-size=10MB
- 我们这里是做了一个修改, 将其修改为10MB
-
-
- 默认配置最终都是映射到某个类上,如:MultipartProperties
-
我们点击到上面的配置中去, 发现会点进到一个类中, 其实这就是说我们的配置最后都会映射到某个类上
-
配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
- 控制台上使我们打印的所有的IOC容器中的组件定义的名字 —> 也就是获取到组件名, 我们可以发现是有我们上面的MultipartProperties类的, 这也就意味着最终配置文件的值不仅仅会绑定到每个类上, 这个类还会在容器中创建对象
-
所以我们如果某个时候要用到某个配置的默认值的时候就获取到对应的bean实例, 然后就提取出里面的bean实例
-
- 非常多的starter
- 引入了哪些场景这个场景的自动配置才会开启
-
在sprint-boot-start根场景启动器中有一个依赖spring-boot-autoconfigure, 其实就是引入了springboot的所有自动配置
-
然后我们可以点击到依赖导入列表中进行一个查看 —> 就看spring-boot-autoconfigure依赖
-
并且如果我们点击到某些自动配置中我们可以发现其中很多都是红的, 这个其实红的就是该自动配置没有开启 —> 后面文章会细讲, 这里不过多赘述
-
获取IOC容器中的所有组件的名字:
package com.ffyc.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) {
//返回IOC容器
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(MainApplication.class, args);
//获取IOC容器中搜索Bean实例的名字
String[] beanDefinitionNames = configurableApplicationContext.getBeanDefinitionNames();
for(String name : beanDefinitionNames) {
System.out.println(name);
}
}
}