SpringBoot自动配置的原理

超详细的Java知识点路线图


前言

本文主要研究SpringBoot的配置,重点是自动配置的原理。

SpringBoot的配置

SpringBoot的配置文件有两种类型:

  • application.properties
server.port=8888
spring.mvc.view.prefix=/resources/templates/
spring.mvc.view.suffix=html
  • application.yml
server:
  port: 8888
spring:
  mvc:
    view:
      prefix: /resources/templates/
      suffix: html

yml文件的配置更加简洁一些,需要注意格式:

  1. 每一层属性都必须有缩进
  2. 冒号后面必须有空格

自动配置原理

前面的SpringMVC案例中我们完全看不到之前SpringMVC繁杂的配置,这些配置都到哪里去了呢?
下面就带大家来看看SpringBoot是如何实现自动配置的。

分析启动类

在这里插入图片描述
两个重点:

  1. @SpringBootApplication 注解
  2. SpringApplication.run方法

@SpringBootApplication

源码:
在这里插入图片描述
@SpringBootApplication三个重要的上级注解:

  • @SpringBootConfiguration
    表示当前类是SpringBoot的配置类,继承了@Configuration注解
  • @ComponentScan
    表示当前类可以对下面的包进行组件扫描,完成IOC
  • @EnableAutoConfiguration
    表示启动自动配置,SpringBoot的自动配置特性就是该注解启动的

自动配置过程

@EnableAutoConfiguration启动了自动配置,还要考虑两个问题:

  1. 配置的内容在哪里呢?
  2. 为什么引入starter后就开始生效呢?

配置的内容

在引入的依赖中,有个叫:spring-boot-autoconfigure
打开后会看到里面有大量的第三方框架名称,几乎涵盖了所有主流的框架。
在这里插入图片描述

SpringMVC配置分析

来看看我们熟悉的SpringMVC的配置
在这里插入图片描述

配置何时生效

WebMvcAutoConfiguration源码:
在这里插入图片描述

重点看上面的几个注解:

  • @Configuration
    表示当前类是一个配置类
  • @ConditionalOnClass
    配置生效的条件是存在某些类,这里有Servlet、DispatcherServlet和WebMvcConfigurer,这些都是SpringMVC核心类,也就是说只要引入了SpringMVC的依赖,配置就生效。
  • @ConditionalOnMissingBean
    配置生效的条件是不存在某些对象,存在WebMvcConfigurationSupport对象配置就失效。
  • @AutoConfigureOrder
    自动配置的顺序
  • @AutoConfigureAfter
    自动配置在哪些配置后执行

属性在哪里

WebMvcAutoConfiguration代码中有视图解析器、前缀和后缀的配置等,该类里面还有其它SpringMVC组件的配置,这里就不一一列举了。
在这里插入图片描述
WebMvcAutoConfiguration进行配置的属性又在哪里呢?

内部类WebMvcAutoConfigurationAdapter
在这里插入图片描述
上面的注解 @EnableConfigurationProperties就是注入配置属性的意思,属性来自于WebMvcProperties、ResourceProperties、WebProperties类。
WebMvcProperties的配置前缀是spring.mvc
在这里插入图片描述
可以看到prefix、suffix、path这些常见的配置属性,我们在配置文件中写的spring.mvc.view.prefix等就能修改这些属性的值。
在这里插入图片描述

自动配置总结

SpringBoot的自动配置原理

  1. 启动类的@SpringBootApplication注解包含@EnableAutoConfiguration注解,启动自动配置
  2. 在spring-boot-autoconfigure依赖中包含了大量第三方框架的自动配置类
  3. 自动配置类包含了对应框架的配置的内容
  4. 自动配置类生效的条件是当某些类被导入项目中,也就是导入了相应的依赖
  5. 开发者不写配置就会应用默认的配置
  6. 开发者可以通过application.properties文件改写配置

结束


大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒哥~Bingo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值