• springboot 自动配置原理


    1. springboot的启动是从启动类开始,那么也从启动类开始分析

     

     点进去@SpringbootApplication这个注解

     追踪@EnableAutoConfiguration查看详情

     分析@Import 这个注解的作用:

    将对象交给springboot工程管理有以下几种方式:

    1. 使用xml配置文件  使用<bean> 标签来自动注入对象

    2. 使用注解的方式  @Repositorry @Controller @Service @Component

    3. 使用java配置的方式   借用注解 @Configuration @Bean

    4. 使用@Import注解:以下进行详细的分析这个注解

     

       

     从源码可以看出@Import 这个注解的使用方式有三种方式:

     1. 使用时需要和@Configuration这个注解一起使用

     2. 实现一个借口ImportSelector 

     3. 实现ImportBeanDefinitionRegistrar (偏底层,不讨论)

       第一种方式的测试:

     第二种方式测试:

     相比第一种方式:第二种方式还是比较好的,可以在实现类中写业务逻辑

    介绍完@Import之后继续看springboot的源码:

    由上面的自定义ImportSelector这个接口的实现类可以看到这个接口获取到需要交由springboot工厂管理的对象的全限定性类名利用反射创建对象。

    因为springboot能够自动注入所以肯定和这个ImportSelector这个接口有关系   追踪进去到AutoConfigurationImportSelector这个类寻找selectImports

    这个方法

     揭开spring.factories 这个配置的神秘面纱

     这是这个配置文件的写法,橙色的是键 绿色的是值,而我们需要加载的是EnableAutioConfiguration这个key 便帮你自动配置好了这些类

    这些类都是配置类。所以如果要写项目还是不要关闭自动配置的功能比较好。

     总结一下就是:

     当你启动springboot的启动类,他默认就会开启自动配置利用注解@Import(AutoConfigurationImportSelector.class) 将这个类的对象交给

    springboot容器来管理,这个类本身又是ImportSelector的子类那么这个类必定实现了selectImports这个方法,那么springboot容器必定会调用这个方法

    创建指定的带有全限定性类名的类的对象,那么为了达到可用性,开发的维护性,等原因,springboot绝对不会真的在这个方法中定义全限定性类名

    那么可选的条件就是使用配置文件,来达到复用性和解耦合,如果使用配置文件就要想到  key和value ,根据key获取value,就要获取到自动配置类中

    封装的配置文件底层仍然借助IO流进行读取,获取到这些自动配置类的全限定性类名,然后创建这些类的对象 ,将这些自动配置类加入到springboot

    容器中进行管理。 其中这些配置类又和自己对应的属性配置类做了映射那么就得到了 完整的场景启动器所需要的配置信息了。

     

  • 相关阅读:
    纯 CSS3 卡通小火车行驶动画
    SVG 和 CSS3 实现一个超酷爱心 Like 按钮
    【转载】尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁
    Centos7 安装k8s
    [转载]log4net 的 MDC、NDC、ThreadContext 和 LogicalThreadContext
    用date获取时间戳
    k8s 排错方式总结
    glusterfs 相关总结
    kubernets 异构部署
    清除 glusterfs brick 信息
  • 原文地址:https://www.cnblogs.com/zhulina-917/p/11884809.html
Copyright © 2020-2023  润新知