zoukankan      html  css  js  c++  java
  • 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

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

     

  • 相关阅读:
    mvc control 请求两次问题
    Jquery跨域获得Json
    使用ajax跨域withCredentials的作用
    以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)
    【算法】字符串近似搜索(转)
    字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)
    图像相似度算法的C#实现及测评
    求时间差的sql语句。 比如如下数据
    微信公众平台开发之微信access_token如何有效长期保存
    PowerDesigner打开设计文件后提示failed to read the fileXXX的解决办法
  • 原文地址:https://www.cnblogs.com/zhulina-917/p/11884809.html
Copyright © 2011-2022 走看看