Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置
- @EnableAutoConfiguration注解
- SpringApplication类
- spring-boot-autoconfigure jar包
- spring.factories文件
@SpringBootApplication
public class MyFirstSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MyFirstSpringbootApplication.class, args);
}
}
查看源码,SpringApplication的静态run方法,实际也是通过创建SpringApplication实例,调用实例方法执行,在SpringApplication构造器方法中,调用了getSpringFactoriesInstances 方法, 如下图
追溯下去,最终会调用到SpringFactoriesLoader的loadSpringFactories方法,如下图
在该方法中,会从所有的META-INF目录下加载spring.factories文件里配置的所有工厂类名称(包括初始化器,监听器,自动配置类等)。然后上层方法中通过反射机制实例化这些工厂类,从而完成相应Bean的自动化配置与注入。
spring.factories文件内容如下图所示
红色框所标识部分的就是Spring Boot提供的大量自动配置类。
- 类级别条件注解
- @ConditionalOnClass: 类路径中存在指定的类才进行该配置
- @ConditionalOnMissingClass: 类路径中不存在指定的类才进行该配置
- 实例级别条件注解
- @ConditionalOnBean:只有在当前上下文中存在指定Bean时,才进行该配置
- @ConditionalOnMissingBean: 只有在当前上下文不存在指定Bean时,才进行该配置
- 属性级别条件注解
- @ConditionalOnProperty:当存在某个指定属性,且值为指定值时,才进行该配置
- 资源级别条件注解
- @ConditionalOnResource:在类路径下存在指定的Resource时,才进行配置
- Web应用条件注解
- @ConditionalOnWebApplication:该应用为Web应用时进行该配置
- @ConditionalOnNotWebApplication: 该应用不为Web应用时进行该配置
- SpEL( Spring Expression Language)表达式注解
- @ConditionalOnExpression: 计算SpEL表达式值,值为true时才进行该配置
- @AutoConfigureAfter: 在指定的配置类初始化后再加载
- @AutoConfigureBefore: 在指定的配置类初始化前加载
- @AutoConfigureOrder: 数值越小越先初始化
Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置的更多相关文章
- Sping Boot入门到实战之入门篇(三):Spring Boot属性配置
该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置. 传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...
- Sping Boot入门到实战之入门篇(一):Spring Boot简介
该篇为Spring Boot入门到实战系列入门篇的第一篇.对Spring Boot做一个大致的介绍. 传统的基于Spring的Java Web应用,需要配置web.xml, applicationCo ...
- Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用
该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...
- xgboost入门与实战(原理篇)
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- Spring Boot入门篇(基于Spring Boot 2.0系列)
1:概述: Spring Boot是用来简化Spring应用的初始化开发过程. 2:特性: 创建独立的应用(jar|war形式); 需要用到spring-boot-maven-plugin插件 直接嵌 ...
- Spring Cloud实战 | 第十篇 :Spring Cloud + Seata 1.4.1 + Nacos1.4.0 整合实现微服务架构中逃不掉的话题分布式事务
Seata分布式事务在线体验地址:https://www.youlai.store 本篇完整源码地址:https://github.com/hxrui/youlai-mall 有想加入开源项目开发的童 ...
- Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制
一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...
- [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权
一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...
- Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期
一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...
随机推荐
- tomcat启动报错
[toc]启动错误 does not exist or is not a readable directory 问题:tomcat启动报错:does not exist or is not a rea ...
- CU社区shell板块awk十三问整理
CU社区shell板块awk十三问整理 一.RS="" 当 RS="" 时,会将\n强制加入到FS变量中,因为RS为空时,是将连续多空行作为分隔符,近似于\n\ ...
- 将centos_yum源更换为阿里云(官方文档)
http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/CentOS ...
- centos7+ansible自动化工具使用
一.基础介绍 ========================================================================================== 1. ...
- 查询操作 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- 分离Webpack开发环境与生产环境的配置
这是Webpack+React系列配置过程记录的第五篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...
- ES6知识点大汇总
1 //1.搭建ES6的开发环境: 2 let a=1; 3 console.log(a); 4 //2.var 声明的是全局变量 全局变量会污染外部的区块 5 //let 局部变量 6 //cons ...
- BZOJ 3684: 大朋友和多叉树 [拉格朗日反演 多项式k次幂 生成函数]
3684: 大朋友和多叉树 题意: 求有n个叶子结点,非叶节点的孩子数量\(\in S, a \notin S\)的有根树个数,无标号,孩子有序. 鏼鏼鏼! 树的OGF:\(T(x) = \sum_{ ...