SpringBoot_自动配置

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

SpringBoot_自动配置
  • 一、SpringBoot 的核心注解:
    • @SpringBootApplication
      • 使用main()方法启动的类,只有该注解。进入该注解如图:
        8b3c03c3-5c88-4d38-83c5-5db0b2ee4862-5210562.jpg
      • @SpringBootConfiguration:底层是@Configuration;
    • 1、@Configuration
      • 该注解用于JavaConfig中,被该注解标注的表示,该类是个配置类
    • 2、@ComponentScan
      • 自动扫描注解,扫描路径下的组件或者Bean;@Controller/@Service/@Component/@Repository
    • 3、@EnableAutoConfiguration
      51774a5b-bb27-4922-91c0-25e487300cc4-5210562.jpg
      • 复合注解:自动载入应用程序所需要的所有默认配置。
      • 最关键的注解@Import({EnableAUtoConfigurationImportSelector.class}), 该注解的作用是帮助SpringBoot 应用将所有符合条件的@Configuration 配置都加载到当前SpringBoot 应用中
        538e1a01-a717-4b80-92b2-042e2d494a04-5210562.jpg
        8b5322ea-9da2-4c0d-8fbe-0a1a11700e62-5210562.jpg
        fe517a4c-647f-4898-b611-7b9134d23575-5210562.jpg
        f41fcc0a-e849-40b7-a1ea-5c8bb714bba3-5210562.jpg
        • 实际上是扫描所有jar路径下的META-INF/spring.factories,将其文件包装成Properties对象,获取key值为EnableAutoConfiguration的数据,然后添加到容器里。
      • @AutoConfigurationPackage,详情如图
        b0cf48a5-7fab-46bf-a659-51b87475c9c7-5210562.jpg
      • Registrar 是 AutoConfigurationPackages 的内部类,方法 registerBeanDefinitions(),在默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。比如: Lambda 表达式中的@Data注解,都是由@AutoConfigurationPackage 注解扫描加载。
        f19da16a-eca7-4589-9dde-584a42335ef2-5210562.jpg
  • 二、SpringBoot 自动配置的流程:
    • 概括:
      • 通过 @EnableAutoConfiguration注解,从classpath 下搜索所有的META-INF/spring.factories 配置文件,并将EnableAutoConfiguration 对应的配置项通过反射实例化为对应标注了@Configuration的Ioc容器配置类,然后汇总为一个并加载到Ioc容器中。
    • 详解:
      • @SpringBootApplication 注解为核心,进入后依赖 @EnableAutoConfiguration注解,进入后依赖@Import注解,根据引入的类EnableAutoConfigurationImportSelector的父类 AutoConfigurationImportSelector,引入SpringFactoriesLoader类,加载所有的META-INF/spring.factories 配置文件。将EnableAutoConfiguration 对应的配置项通过反射实例化为对应标注了@Configuration的Ioc容器配置类,然后汇总为一个并加载到Ioc容器中。
  • 三、从源码分析SpringBoot 自动配置的过程:
    • 1、创建SpringApplication 对象,如图
      ec334d0e-cb39-4bdf-8c36-f0db7e7979a1-5210562.jpg
    • 2、进入SpringApplication 的带参构造方法,如图
      850c6d52-46e1-428e-a2fb-477e3c77c8d8-5210562.jpg
    • 3、初始化方法,initialize(),如图
      e05a7d9e-472f-4037-a75f-d429d616a546-5210562.jpg
    • 4、通过getSpringFactoriesInstances()方法,实例化ApplicationContextInitializer、ApplicationListener,方法内部,如图
      a151f496-cafd-4949-bf7e-898b17dfb664-5210562.jpg
    • 5、loadFactoryNames()方法,如图
      b61a3ea0-ee52-4eb8-8b3f-d6a4bbb0a08c-5210562.jpg
    • 6、在Spring-boot 和Spring-boot-autoconfig 的META-INF/spring.factories ,如图
      492c885b-615a-43a8-b153-00f2d5fa0755-5210562.jpg
      04bd903d-9990-4816-907c-c061adb530d4-5210562.jpg
  • 四、实例
    • 比如Redis 的自动配置,使用如下:
      • 1、在pom文件中引入依赖;
      • 2、在application.yml 或者 application.properties 引入如下配置:
        bdbc1300-ab7a-4546-9092-3b6384cc018b-5210562.jpg
      • 3、 如此即可在项目中使用redis,集成非常简单。
    • 原理:
      • 自动配置扫描了spring.factories ,找到如下所示:
        df1128d4-cbbd-48f0-9322-ba5ccc5ceb23-5210562.jpg
        0f60c494-9ad9-42f3-8595-99ce40eaa314-5210562.jpg
        • @ConditionalOnClass注解: 如果classpath,依赖中含有JedisConnection, RedisOperations,Jedis 这三个类,则添加redis的自动配置。
    • 总结:
      • 根据jar包依赖,添加自动配置。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
177 0
SpringBoot 自动配置的原理|学习笔记
|
JSON NoSQL Java
Java--Redis-08-redis在SpringBoot中配置
在Spring Boot中,我们可以通过配置来自定义一个属于我们自己的RedisTemplate。
123 0
Java--Redis-08-redis在SpringBoot中配置
|
前端开发 Java Nacos
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
703 1
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
|
XML JSON 开发框架
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
|
存储 安全 网络协议
springboot 配置ssl 实现https访问
springboot 配置ssl 实现https访问
371 0
springboot 配置ssl 实现https访问
|
Java 应用服务中间件
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小
|
缓存 搜索推荐 Java
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
211 0
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
|
运维 Java 数据库
《SpringBoot篇》03.超详细属性配置介绍
《SpringBoot篇》03.超详细属性配置介绍
163 0
《SpringBoot篇》03.超详细属性配置介绍