springboot08 自动配置原理
8、自动配置原理
配置文件到底能写什么?怎么写?
SpringBoot官方文档中有大量的配置,我们无法全部记住
8.1、分析自动配置原理
我们以**HttpEncodingAutoConfiguration(Http编码自动配置)**为例解释自动配置原理;
//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件;
@Configuration //启动指定类的ConfigurationProperties功能;//进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来;//并把HttpProperties加入到ioc容器中
@EnableConfigurationProperties({HttpProperties.class}) //Spring底层@Conditional注解//根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效;//这里的意思就是判断当前应用是否是web应用,如果是,当前配置类生效
@ConditionalOnWebApplication(type = Type.SERVLET
)//判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
@ConditionalOnClass({CharacterEncodingFilter.class})//判断配置文件中是否存在某个配置:spring.http.encoding.enabled;//如果不存在,判断也是成立的//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
@ConditionalOnProperty(prefix = "spring.http.encoding",value = {"enabled"},matchIfMissing = true
)public class HttpEncodingAutoConfiguration {//他已经和SpringBoot的配置文件映射了private final Encoding properties;//只有一个有参构造器的情况下,参数的值就会从容器中拿public HttpEncodingAutoConfiguration(HttpProperties properties) {this.properties = properties.getEncoding();}//给容器中添加一个组件,这个组件的某些值需要从properties中获取@Bean@ConditionalOnMissingBean //判断容器没有这个组件?public CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));return filter;}//。。。。。。。
}
一句话总结 :根据当前不同的条件判断,决定这个配置类是否生效!
- 一但这个配置类生效;这个配置类就会给容器中添加各种组件;
- 这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
- 所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;
- 配置文件能配置什么就可以参照某个功能对应的这个属性类
//从配置文件中获取指定的值和bean的属性进行绑定
@ConfigurationProperties(prefix = "spring.http")
public class HttpProperties {// .....
}
我们去配置文件里面试试前缀,看提示!
这就是自动装配的原理!
8.2、精髓总结
1、SpringBoot启动会加载大量的自动配置类
2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
8.3、了解:@Conditional
了解完自动装配的原理后,我们来关注一个细节问题,自动配置类必须在一定的条件下才能生效;
@Conditional派生注解(Spring注解版原生的@Conditional作用)
作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效;
那么多的自动配置类,必须在一定的条件下才能生效;也就是说,我们加载了这么多的配置类,但不是所有的都生效了。
我们怎么知道哪些自动配置类生效?
我们可以通过启用 debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效;
#开启springboot的调试类
debug=true
Positive matches:(自动配置类启用的:正匹配)
Negative matches:(没有启动,没有匹配成功的自动配置类:负匹配)
Unconditional classes: (没有条件的类)
【演示:查看输出的日志】
掌握吸收理解原理,即可以不变应万变!
springboot08 自动配置原理相关推荐
- Spring Boot 面试杀手锏:自动配置原理
欢迎关注方志朋的博客,回复"666"获面试宝典 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观望态度外,如 ...
- SpringBoot面试杀手锏——自动配置原理
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/u014745069/ article/details/83820511 引言 不论在工作中,亦或 ...
- 这样讲 SpringBoot 自动配置原理,你应该能明白了吧
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:你在我家门口 juejin.im/post/5ce5effb ...
- Spring Boot常见企业开发场景应用、自动配置原理结构分析
读者应具备: Spring SpringMVC服务器端开发基础 Maven基础 本篇主要介绍Spring Boot在企业开发中常见场景的使用.以及Spring Boot的基本原理结构. 以下为本篇设计 ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- 自动配置原理精讲||@Conditional ||怎么知道哪些自动配置类生效? 启用debug=true属性(在配置文件配置);
自动配置原理精讲 派生注解 配置文件怎么配置 server.port spring.config.location="D://application.properties" htt ...
- 配置文件加载位置||外部配置加载顺序||自动配置原理
配置文件加载位置 SpringBoot会从这四个位置全部加载主配置文件:互补配置: 外部配置加载顺序 自动配置原理 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置 ...
- Spring Boot自动配置原理、实战
Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...
- batch normalization的原理和作用_springboot自动配置原理
配置文件能配置的属性参照https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-appli ...
最新文章
- 独家 | 5个步骤开启你的数据科学职业生涯!(附链接)
- Core Dump流程分析
- jenkins 下载插件 一直失败_Jenkins. 安装错误: No such plugin: cloudbees-folder
- 归纳整理--第4篇--常用软件
- 使用Spring Cloud Stream与RabbitMQ集成
- 计算机英语 考研 翻译,研究生英语翻译笔记
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E. Half-consecutive Numbers
- Java数组索引越界异常
- 【计算机网络】计算机网络基础知识
- 如何对付不能卸载的杀毒软件
- 安装VMware Workstation 14
- 修改contour的线条颜色
- vue直传图片到阿里云OSS(单张直接上传)
- 如何制作动态拼图?教你如何在线拼接动图
- 修改Discuz! X2标题、底部和Archiver页面的版权信息
- 用Python分割九宫格图片发朋友圈
- SSL P1194 最优乘车 题目
- SpringBoot集成Quartz动态定时任务
- 35岁以后找工作难,只能熬到65岁才能退休,太惨 了!
- 前后端分离微服务管理系统项目实战SaaS-HRM项目(九)——文件上传与PDF报表入门
热门文章
- Setup Factory 打包工具部分功能代码解
- 如何快速掌握计算机知识,怎样快速学会电脑 学电脑的5种方法推荐
- MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式
- 东北大学文科能学计算机专业吗,东北大学有哪些好专业,文科理科专业分别有哪些...
- Java 跑酷游戏 rush,翻转跑酷游戏安卓下载|翻转跑酷最新版(Flip Rush)下载v1.0.5-乐游网安卓下载...
- as常用固定搭配_人民日报整理:英语常用介词固定搭配,太实用了!
- Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar
- 1.每天一个linux命令 ls
- java-JDBC配置驱动程序
- Android 开发工具类 03_HttpUtils