一、自动装配

通过 @SpringBootApplication扫描的包,会全部被springboot自动装配,并最终会指向“META-INF/spring.factories”文件,这个文件是一个核心自动装配文件,所有的东西都在这里面配置好了。每个XXXAuto configuration,都是容器中的一个主键,他们都有可能被加到容器中来做一些自动配置,通过上面的源码追踪,最后找到的文件就是下图的文件。

二、思考:我们的application.yml和spring.factories之间有什么联系呢?

1、下面我们打开一个看看,代码如下(重点在于下面代码中的注释部分)

//表示一个配置类,表示他会被spring接管配置
@Configuration(proxyBeanMethods = false)
//自动配置属性
@EnableConfigurationProperties(ServerProperties.class)
//@ConditionalOn是spring的底层注解,根据不同的条件来判断当前配置或类是否生效
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) //判断是否为web应用
@ConditionalOnClass(CharacterEncodingFilter.class) //字符编码过滤器
@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true) //判断是否有这个配置,false,则走默认
public class HttpEncodingAutoConfiguration {private final Encoding properties;
//构造器也指向了自动配置属性的properties
public HttpEncodingAutoConfiguration(ServerProperties properties) {this.properties = properties.getServlet().getEncoding();
}@Bean
@ConditionalOnMissingBean
public CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(Encoding.Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(Encoding.Type.RESPONSE));return filter;
}@Bean
public LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() {return new LocaleCharsetMappingsCustomizer(this.properties);
}static class LocaleCharsetMappingsCustomizerimplements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>, Ordered {private final Encoding properties;LocaleCharsetMappingsCustomizer(Encoding properties) {this.properties = properties;}@Overridepublic void customize(ConfigurableServletWebServerFactory factory) {if (this.properties.getMapping() != null) {factory.setLocaleCharsetMappings(this.properties.getMapping());}}@Overridepublic int getOrder() {return 0;}
}
}

2、我们点击这个ServerProperties进去看看,进入到ServerProperties.java文件

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)

3、我们在yaml文件中写server.就会出现与HttpProperties.java中的属性一样,也就是说我们yaml中配置的东西就是ServerProperties类中的东西

4、@ConditionalOn是spring的底层注解,根据不同的条件来判断当前配置或类是否生效

小结:在我们这个配置文件中能配置的东西,都存在一个固有的规律: XXXProperties  被XXXAutoConfiguration文件自动装配,可以通过XXXProperties加载一些自定义文件,XXXProperties文件又跟我们的配置文件进行了绑定;
XXXAutoConfiguration:(自动装配)默认值 ---->有很多XXXProperties----和----配置文件绑定,因此我们就可以使用配置文件进行自定义配置了。

三、核心总结:

1、SpringBoot启动会加载大量的自动配置类
2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性;

四、如何查看哪些自动配置类生效

通过在yaml文件中使用debug=true的属性来让控制台打印自动配置报告

【SpringBoot系列】自动装配原理相关推荐

  1. 【SpringBoot】自动装配原理

    [SpringBoot]自动装配原理 文章目录 [SpringBoot]自动装配原理 一.pom.xml 1.spring-boot-dependencies 2.spring-boot-starte ...

  2. SpringBoot之自动装配原理

    1. 自动装配的使用 Spring Boot的核心理念是简化Spring应用的搭建和开发过程,提出了约定大于配置和自动装配的思想.开发Spring项目通常要配置xml文件,当项目变得复杂的时候,xml ...

  3. springboot 整合redis_springboot自动装配原理详解

    1)传统ssm整合redis的时候 需要在xml的配置文件中 进行大量的配置Bean 我们在这里使用springboot来代替ssm的整合,只是通过xml的形式来整合redis 第一步:加入配置 &l ...

  4. SpringBoot 自动装配原理解析

    自动装配是 Spring Boot 的核心部分,也是 Spring Boot 功能的基础,正是由于自动装配,才 将我们从 Bean 的繁复配置中解脱出来.那么 Spring Boot 中的自动装配指的 ...

  5. springboot 项目起步讲解及自动装配原理

    哈喽~大家好,这篇看看springboot 项目起步讲解及自动装配原理.

  6. 【理解springboot自动装配原理】

    理解springboot自动装配原理: 最近读了小马哥(mercyblitz)Springboot编程思想(核心篇),有了一些心得和感悟,分享给大家: 1. 官网介绍了激活自动装配的方法: * 文档提 ...

  7. SpringBoot自动装配原理浅析

    Springboot自动装配原理 SpringBoot是当下J2EE最为流行的框架,它有着轻量,快捷等特点,让程序员们可以专注在业务逻辑的编写上,而不用花太多的力气在一些环境的配置,整合组件的配置上面 ...

  8. 刨析 SpringBoot 自动装配原理,其实很简单

    J3 SpringBoot # 源码 # 自动装配 一日我在愉快得遨游时,看到有鱼友在问:SpringBoot 中引入了 Nacos 依赖为啥就可以直接使用 Nacos 中的相关功能呀! 认真思考了一 ...

  9. 雷神SpringBoot入门和自动装配原理

    SpringBoot-helloWord! 首先让当前的工程作为Springboot的子工程 <parent><groupId>org.springframework.boot ...

  10. SpringBoot自动装配原理解析——面试可以这样会回答

    1. 前言 SpringBoot是目前软件中最主流的框架,无论是工作还是面试基本都有它的身影,SpringBoot主要解决了传统spring的重量级xml配置Bean,实现了自动装配:所以,我们也常在 ...

最新文章

  1. mysql timestamp比较查询
  2. [原创]K8域控植入脚本生成器(内网渗透/RPC不可用解决方案)
  3. 【springboot】模板路径、静态资源路径、WebRoot的本地路径
  4. vba htm转成图片_提取1000页PPT的图片,同事花了两小时,我只花了两分钟
  5. 基础练习 01字串 c语言
  6. Delphi应用程序在命令行下带参数执行返回命令行提示的问题
  7. MySQL笔记-ibd文件格式初步分析(仅数据块笔记)
  8. 从微服务应用于技术栈,了解华为云微服务应用
  9. 抱怨一下有些邮件列表的气氛
  10. 250个jquery 插件
  11. upload漏洞专题
  12. matlab更改类型,matlab数据类型和转换
  13. unity游戏开发毕设_毕设分享:用Unity探究2D游戏的打击感
  14. python爬取51job关于python的招聘信息
  15. 收缩毛孔全过程,很详细! - 健康程序员,至尚生活!
  16. 最常用的5个网页自动化点击工具
  17. android obb在哪,.obb是什么文件?obb文件怎么用/放在哪里
  18. 华为系统鸿蒙的名字来源,鸿蒙系统名字含义_华为鸿蒙操作系统自己研发吗
  19. vue3 静态图片 或者 css等 import 报错 Cannot find module ‘xxxx‘ or its corresponding type de
  20. VS2005 编译器选项

热门文章

  1. 无法获取 vmci 驱动程序版本句柄无效解决办法
  2. 数字电路设计JK触发器
  3. 中文域名正确注册、配置、使用
  4. 资深架构师推荐 21 本技术好书
  5. 面试中问到的遇到什么困难的问题,如何解决? 方法论借鉴
  6. 配置telnet远程登录管理二层交换机
  7. linux虚拟磁盘服务,hintsoft Linux iscsi虚拟磁盘完全教程及优化攻略
  8. 顺序结构-计算标准体重
  9. 计算机重装后不能启动怎么办,重装系统后无法进入系统怎么办 修复进不去系统方法教程...
  10. thinkpad开机后无法进入系统怎么办?