https://sdqali.in/blog/2016/07/16/controlling-redis-auto-configuration-for-spring-boot-session/

常用的类:

@ConditionalOnProperty(name = "use.redis.session.store", havingValue = "true")
@ConditionalOnClass(Session.class)
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnWebApplication
@ConditionalOnMissingBean(RedisHttpSessionConfiguration.class)
@SpringBootApplication(exclude ={SessionAutoConfiguration.class})

举例:以MybatisAutoConfiguration为例
1. 在jar包中/META-INF/spring.factories中配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
spring在启动时会去自动加载这个bean

2. MybatisAutoConfiguration.java上加上@Configuration

3. 如果需要通过自定义构造函数来构造bean,则加上构造函数

public MybatisAutoConfiguration(MybatisProperties properties,
ObjectProvider<Interceptor[]> interceptorsProvider,
ResourceLoader resourceLoader,
ObjectProvider<DatabaseIdProvider> databaseIdProvider,
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider) {
this.properties = properties;
this.interceptors = interceptorsProvider.getIfAvailable();
this.resourceLoader = resourceLoader;
this.databaseIdProvider = databaseIdProvider.getIfAvailable();
this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
}

构造函数中依赖的Bean,Spring会自动从Spring beanFactory容器中去找到适配的bean来传入

参数:
MybatisProperties properties --> 依赖MybatisProperties 这个bean,而MybatisProperties 是一个@ConfigurationProperties。则加上@EnableConfigurationProperties(MybatisProperties.class),让bean MybatisProperties 先加载
ObjectProvider<Interceptor[]> interceptorsProvider --> 依赖 org.apache.ibatis.plugin.Interceptor[],但又不确定 Interceptor 的bean是否存在,则通过ObjectProvider<Interceptor[]> 去获取,interceptorsProvider.getIfAvailable()
ResourceLoader resourceLoader --> 依赖 bean ResourceLoader,直接在 Spring 容器中找到相应的 bean
ObjectProvider<DatabaseIdProvider> databaseIdProvider --> 同上
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider --> 同上

附:断点打在MybatisAutoConfiguration 的构造函数上,查看调用栈,便可以看出端倪

SpringBoot自动配置xxxAutoConfiguration 的使用的更多相关文章

  1. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧

    https://juejin.im/post/5ce5effb6fb9a07f0b039a14 前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题 ...

  2. SpringBoot自动配置原理源码级别分析

    SpringBoot自动配置原理 前言 后面还会讲到SpringBoot自动配置原理,会主要讲解@EnableAutoConfiguratuon注解帮助我们做了什么事情,是如何自动把自动配置类扫描到容 ...

  3. springboot自动配置原理以及手动实现配置类

    springboot自动配置原理以及手动实现配置类 1.原理 spring有一个思想是"约定大于配置". 配置类自动配置可以帮助开发人员更加专注于业务逻辑开发,springboot ...

  4. SpringBoot自动配置源码调试

    之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探 ...

  5. SpringBoot实战之SpringBoot自动配置原理

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  6. springboot自动配置源码解析

    springboot版本:2.1.6.RELEASE SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfig ...

  7. 源码学习系列之SpringBoot自动配置(篇一)

    源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属 ...

  8. 源码学习系列之SpringBoot自动配置(篇二)

    源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续 ...

  9. Springboot 自动配置浅析

    Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...

随机推荐

  1. 中断描述符表(Interrupt Descriptor Table,IDT)

    中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来.与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组. #pr ...

  2. Extjs js 产生Guid或者UUID

    Ext.data.IdGenerator.get('uuid').generate() 结果:a9c4efb8-06c9-4c2e-8a70-bb36a69e053e 更多介绍:http://docs ...

  3. 初入android驱动开发之字符设备(四-中断)

    上一篇讲到android驱动开发中,应用是怎样去操作底层硬件的整个流程,实现了按键控制led的亮灭.当然,这是一个非常easy的实例,只是略微演变一下,就能够得到广泛的应用. 如开发扫描头,应用透过监 ...

  4. jQuery(七):节点操作

    jQuery中节点操作主要分为以下几种: 查找节点. 创建节点. 插入节点. 替换节点. 复制节点. 删除节点. 一.查找节点 示例: <!DOCTYPE html> <html l ...

  5. linq操作符:聚合操作符

    一.Aggregate操作符 Aggregate操作符对集合值执行自定义聚合运算.来看看Aggregate的定义: public static TSource Aggregate<TSource ...

  6. java jdbc preparedstatement 分析

    https://blog.csdn.net/xiong9999/article/details/54137326

  7. 创建Maven项目出错

    有时候创建maven项目的时候会出错,例如在创建Spring cloud 2 项目的时候,会出现org.apache.maven.archiver.MavenArchiver.getManifest( ...

  8. Android studio中出现Couldn't resolve resource @dimen/...

    问题出现: Path.isConvex is not supported. Rendering problems .. Couldn't resolve resource @dimen/...等等 资 ...

  9. C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  10. Windows Server 2012 任务管理器“性能”Tab页显示磁盘信息

    最新文章:Virson's Blog Win+x,以管理员身份运行“命令提示符”(Cmd),输入diskperf -y,确定即可,如下图.