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另外还有一个 ...
随机推荐
- String 类的选择输出
package com.day_08.strings; /* * 通过API可知/String是在Java.lang包下的类,所以不用导包 */ public class StringDemo { p ...
- Log4net使用详细说明
1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...
- mysql数据库安装注意事项:
mysql数据库安装注意事项: https://jingyan.baidu.com/article/642c9d34aa809a644a46f717.html(安装教程) 注意语言设置为gbk可以解决 ...
- 解析js中作用域、闭包——从一道经典的面试题开始
如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎 ...
- 02_Linux图形界面及文件系统结构介绍
一.根目录 / : 它跟Windows的C.D.E.F不同,在Linux中,所有的文件系统(光驱.U盘.硬盘)都挂载到根目录的某一个文件夹下 bin : 存放二进制可执行文件 sbin ...
- Power shell 重启IIS
最近根据项目需要写了一段power shell的代码 ,主要功能是批量重启IIS 具体的 Power shell 服务如下: write-output 'Restarting IIS servers ...
- GitHub入门之路(1)
介绍 从本篇文章开始,是一系列介绍GitHub相关内容以及Git的一些基本操作的文章,记录了自己的学习过程. 概要 简单介绍GitHub是什么,Git又是什么. 1.Git是什么 Git是一款分散型的 ...
- 使用最小堆优化Dijkstra算法
OJ5.2很简单,使用priority_queue实现了最小堆竟然都过了OJ……每次遇到relax的问题时都简单粗暴地重新push进一个节点…… 然而正确的实现应该是下面这样的吧,关键在于swap堆中 ...
- BZOJ 3550: [ONTAK2010]Vacation [单纯形法]
有3N个数,你需要选出一些数,首先保证任意长度为N的区间中选出的数的个数<=K个,其次要保证选出的数的个数最大. 好像都是费用流... 单纯性裸题呀... 注意每个数最多选1次 #include ...
- Redis进阶实践之十 Redis哨兵集群模式
一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...