• 【SpringBoot】SpringBoot 自动配置原理


      自动配置原理分析从@SpringBootApplication注解开始,本章使用的SpringBoot版本是2.2.5

    一、@SpringBootApplication注解  

      @SpringBootApplication注解包括了@SpringBootConfiguration、@EnableAutoConfiguration 和@ComponentScan

      @SpringBootConfiguration注解: 只是说明当前类是一个配置类,Spring初始化会将当前类做配置类处理

      @ComponentScan:扫描注解,由于没有配置basePackages属性,那么Spring扫描时,会将当前类的包路径当作扫描路径

      @EnableAutoConfiguration:开启自动配置,启动导入类2个类 AutoConfigurationPackages.Registrar.class 和 AutoConfigurationImportSelector.class

    @SpringBootApplication注解如下:

     1 // 注解类型(类、接口、或者枚举)
     2 @Target(ElementType.TYPE)
     3 // 保留策略(运行时有效)
     4 @Retention(RetentionPolicy.RUNTIME)
     5 // java doc 会生成注解信息
     6 @Documented
     7 // 子类会继承父类使用的注解中被@Inherited修饰的注解
     8 @Inherited
     9 // 当前是SpringBoot配置类
    10 @SpringBootConfiguration
    11 // 开启自动配置
    12 @EnableAutoConfiguration
    13 // 扫描当前注解类的包路径
    14 @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    15         @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    16 public @interface SpringBootApplication {
    17 
    18     ......
    19 
    20 }

    @EnableAutoConfiguration注解如下:

      @EnableAutoConfiguration 包含了@AutoConfigurationPackage注解

     1 @Target(ElementType.TYPE)
     2 @Retention(RetentionPolicy.RUNTIME)
     3 @Documented
     4 @Inherited
     5 @AutoConfigurationPackage
     6 @Import(AutoConfigurationImportSelector.class)
     7 public @interface EnableAutoConfiguration {
     8 
     9     ......
    10 
    11 }
    1 @Target(ElementType.TYPE)
    2 @Retention(RetentionPolicy.RUNTIME)
    3 @Documented
    4 @Inherited
    5 @Import(AutoConfigurationPackages.Registrar.class)
    6 public @interface AutoConfigurationPackage {
    7 
    8 }

    二、自动配置原理图解

      

      说明:

      AutoConfigurationImportSelector.class

      1、Spring解析AutoConfigurationImportSelector.class 导入类的时候,会延迟解析,应为它实现了 DeferredImportSelector 延迟导入选择器接口

      2、AutoConfigurationImportSelector 导入类的时候,会从META-INF/spring.factories中获取 EnableAutoConfiguration 类型的类名称

      3、然后Spring在解析 EnableAutoConfiguration 类型的类,大部分都是一些自动配置类 XXXAutoConfiguration,Spring通过解析这些自动配置类就能得到需要导入类的Bean定义

      4、最后在通过Bean定义初始化成类对象,完成了自动配置功能

     

  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/h--d/p/14797662.html
Copyright © 2020-2023  润新知