从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序

今天跟随了汪云飞老师写的  Spring Boot实战 看了下springboot的启动动态加载。

一部分根据默认配置找jar包的原理:

        @SpringBootApplication这个组合注解中的@EnableAutoConfiguration注解的@Import(AutoConfigurationImportSelector.class)将AutoConfigurationImportSelector.class导入。

        selectImports方法中的getCandidateConfigurations方法--》

        List configurations = SpringFactoriesLoader.loadFactoryNames(

getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());--》


        现在来看loadFactoryNames方法:

        先得到springboot

        从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序_第1张图片



不得不说源码格式好。。给读者的观赏都是上下文紧密衔接的

从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序_第2张图片

找到key值为org.springframework.boot.autoconfigure.EnableAutoConfiguration 的property的list

得到了需要配置的jar包list后。有个去重方法,这是本次发现的重点!

从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序_第3张图片

去重方法实现如下:


从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序_第4张图片

linkedHashSet(Collection)其结果是构造与指定集合相同的元素的新的链接散列集

ArrayList可以通过集合泛型构造,方法是通过转为Object[]数组,再拷贝。  

从springboot的启动动态加载中发现使用LinkedHashSet给ArrayList去重并保持顺序_第5张图片

ok,是不是感觉使用LinkedHashSet给ArrayList去重并保持顺序非常好,毕竟是Spring的底层所使用,经得起推敲考研的。














这里找到一个对Spring EnableAutoConfigurationImportSelector 是如何工作的 注释比较全的博客:

https://blog.csdn.net/andy_zhang2007/article/details/78580980


你可能感兴趣的:(Java学习)