您的位置:首页 > 编程语言 > Java开发

SpringBoot_自动配置

2020-03-19 20:25 447 查看

https://yq.aliyun.com/articles/745551



SpringBoot_自动配置
  • 一、SpringBoot 的核心注解: @SpringBootApplication 使用main()方法启动的类,只有该注解。进入该注解如图:
  • @SpringBootConfiguration:底层是@Configuration;
  • 1、@Configuration
      该注解用于JavaConfig中,被该注解标注的表示,该类是个配置类
  • 2、@ComponentScan
      自动扫描注解,扫描路径下的组件或者Bean;@Controller/@Service/@Component/@Repository
  • 3、@EnableAutoConfiguration
      复合注解:自动载入应用程序所需要的所有默认配置。
    • 最关键的注解@Import({EnableAUtoConfigurationImportSelector.class}), 该注解的作用是帮助SpringBoot 应用将所有符合条件的@Configuration 配置都加载到当前SpringBoot 应用中 实际上是扫描所有jar路径下的META-INF/spring.factories,将其文件包装成Properties对象,获取key值为EnableAutoConfiguration的数据,然后添加到容器里。
  • @AutoConfigurationPackage,详情如图
  • Registrar 是 AutoConfigurationPackages 的内部类,方法 registerBeanDefinitions(),在默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。比如: Lambda 表达式中的@Data注解,都是由@AutoConfigurationPackage 注解扫描加载。
  • 二、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 对象,如图
    • 2、进入SpringApplication 的带参构造方法,如图
    • 3、初始化方法,initialize(),如图
    • 4、通过getSpringFactoriesInstances()方法,实例化ApplicationContextInitializer、ApplicationListener,方法内部,如图
    • 5、loadFactoryNames()方法,如图
    • 6、在Spring-boot 和Spring-boot-autoconfig 的META-INF/spring.factories ,如图
  • 四、实例
      比如Redis 的自动配置,使用如下: 1、在pom文件中引入依赖;
    • 2、在application.yml 或者 application.properties 引入如下配置:
    • 3、 如此即可在项目中使用redis,集成非常简单。
  • 原理:
      自动配置扫描了spring.factories ,找到如下所示: @ConditionalOnClass注解: 如果classpath,依赖中含有JedisConnection, RedisOperations,Jedis 这三个类,则添加redis的自动配置。
  • 总结:
      根据jar包依赖,添加自动配置。


  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签:  spring redis spring boot cf f2