SpringBoot自动配置原理

自动配置特性

  1. 自动配好Tomcat
    • 引入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
  1. 自动配好SpringMVC
    • 引入SpringMVC全套组件
    1. 自动配好SpringMVC常用组件
      • 比如 : dispatcherServlet
        • 前端控制器 —> 所有的请求都是要先发送到前端控制器的
      • 比如 : characterEncodingFilter
        • 字符编码过滤器 —> 防止POST参数乱码和GET请求中文乱码
    2. 自动配好Web常见功能,如:字符编码问题
SpringBoot帮我们配置好了所有web开发的常见场景 —> 我们只需要负责引入一个场景启动器, 然后SpringBoot会帮我们引入所有Web场景的依赖, 还会对所有的常用组件(常用功能)进行一个配置
  1. 默认的包结构
    • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
    • 无需以前的包扫描配置
    • 想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.atguigu”) 或者@ComponentScan 指定扫描路径
      • 因为@ComponentScan不是一个可重复注解, 而@SpringBootApplication注解中其实就是@ComponentScan以及其他注解合成的, 所以这里会报错, 后面我们会讲解如何在使用@SpringBootApplication注解的基础上一同使用@ComponentScan注解
    • 或者@ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
  1. 各种配置拥有默认值
    • 我们可以到application.properties文件中看对应配置的默认值

      • 如文件上传的默认最大容量 :

      在这里插入图片描述

      spring.servlet.multipart.max-file-size=10MB
      
      • 我们这里是做了一个修改, 将其修改为10MB
    • 默认配置最终都是映射到某个类上,如:MultipartProperties

    在这里插入图片描述

    • 我们点击到上面的配置中去, 发现会点进到一个类中, 其实这就是说我们的配置最后都会映射到某个类上

    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

      在这里插入图片描述

      • 控制台上使我们打印的所有的IOC容器中的组件定义的名字 —> 也就是获取到组件名, 我们可以发现是有我们上面的MultipartProperties类的, 这也就意味着最终配置文件的值不仅仅会绑定到每个类上, 这个类还会在容器中创建对象
    • 所以我们如果某个时候要用到某个配置的默认值的时候就获取到对应的bean实例, 然后就提取出里面的bean实例

  1. 按需加载所有自动配置项
    • 非常多的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);
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值