一线大牛带你深入解析AutoConfiguration源码( 二 )
DeferredlmportSelector 的加载顺序可以通过@Order 注解或实现 Ordered 接口来指定 。 同时 , DeferredlmportSelector 提供了新的方法 getlmportGroup()来跨 DeferredlmportSelector实现自定义 Configuration 的加载顺序 。
AutoConfigurationlmportSelector 功能概述
下面我们通过图 2-3 所示的流程图来从整体上了解 AutoConfigurationlmportSelector 的核心功能及流程 , 然后再对照代码看具体的功能实现 。 图 2-3 中省略了外部通过@Import 注解调用该类的部分 。
文章插图
当 AutoConfigurationlmportSelector 被@lmport 注解引入之后 , 它的 slectmports 方法会被调用并执行其实现的自动装配逻辑 。 读者朋友需注意 , seletmports 方法几乎涵盖了组件自动装配的所有处理逻辑 。
AhtonfiruriomoprSelelereleltiports 方法源代码如下:
@Overridepublic String[ ] selectImports (AnnotationMetadata annotationMetadata) {//检查自动配置功能是否开肩 , 默认为开启if (!isEnabled(annotat ionMetadata)) {return NO_ IMPORTS;//加戴自动配置的元信息 , 配置文件为类路径中 META-INF 目录下的// spring-autoconfigure -metadata. properties 文件AutoConfigurationMetadata autoConfigurationMetadata = http://kandian.youth.cn/index/AutoConfigurationMetadataLoader. loadMetadata(this . beanClassLoader);//封装将被引入的自动配置信息AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntryautoConfigurationMetadata, annotationMetadata) ;//返回符合条件的配置类的全限定名数组return StringUtils. toStringArray(autoConfigurationEntry. getConfigurations());}protected AutoConfigurationEntry getAutoConfigurat ionEntry(AutoConfigurat ionMetadata autoConfi gurationMetadata,Annotat ionMetadata annotationMetadata) {if (!isEnabled( annotationMetadata)) {return EMPTY_ ENTRY;}AnnotationAttributes attributes = getAttributes ( annotat ionMetadata);//通过 SpringFactoriesLoader 类提供的方法加戴类路径中 META-INF 目录下的// spring . factories 文件中针对 EnableAutoConfigurat ion 的往册配置类List configurations = getCandidateConfigurations (annotationMetadata,attributes);//对获得的注册配置类集合进行去重处理 , 防止多个项目引入同样的配置类 configurations =removeDuplicates( configurations);//获得炷解中被 excLude.或 excLudeName 所排除的类的集合Set exclusions = getExclusions ( annotationMetadata, attributes);//检查被排除类是否可实例化 , 是否被自动注册配置所使用 , 不符合条件则抛出异常checkExcludedClasses (configurations, exclusions);//从自动配置类集合中去除被排除的类configurations . removeAll(exclusions);//检查配置类的注解是否符合 spring . factories 文件中 AutoConfigurat ionImportFilter.指定的注解检查条件configurations = filter( configurations, autoConfigurationMetadata);//将筛选完成的配置类和排查的配置类构建为事件类 ,并传入监听器 。 监听器的配置在Fspring . factories 文件中 , 通过 AutoConf igurat ionImportL istener 指定fireAutoConfigurationImportEvents( configurations, exclusions);return new AutoConfigurat ionEntry(configurations, exclusions);}
通过图 2-3 和上述代码 , 我们从整体层面了解了 AutoConfigurationlmportSelector 的概况及操作流程 , 后文将对这些流程进行细化拆分 , 并通过阅读源代码来分析 Sprng Boot 是如何实现自动加载功能的 。
推荐阅读
- 集录音转写、拍照翻译为一体,搜狗AI录音笔E2带你开启智慧办公新体验
- 小姐姐带你探索萌粉电竞显示器的秘密
- 华为5G智能摄像机带你看查干湖冬捕
- 解锁年轻人视频社交新方式 华为nova8 Pro带你拍出专业Vlog
- RX 6000玩游戏好在哪?Frank Azor带你细细品
- 惠州惠城供电局:智慧“云”监工守护一线安全防线
- 十二不如十三香,其中的十三又究竟是什么,带你了解十三香
- 华为DIGIX数字生活节即将落地广州 带你一起领略数字生活新风尚
- RX6000玩游戏好在哪?AMD首席游戏架构师Frank Azor带你细细品
- 华为成都旗舰店正式开业 AR熊猫带你进入智慧生活