SpringBoot AutoConfigure自动配置

前言:项目中需要对一个代码仓库进行投毒,该仓库的架构为SpringBoot,这边需要了解和学习下SpringBoot的自动配置编写

参考文章:https://www.cnblogs.com/Bernard94/p/17465592.html
参考文章:https://github.com/jeecgboot/jeecg-boot
参考文章:https://gitcode.net/weixin_51407397/autoconfigdemo

自动配置AutoConfigure

这里拿JeecgBoot来进行学习,该代码的入口点org.jeecg.JeecgSystemApplication,可以看到该JeecgSystemApplication类的注解存在@SpringBootApplication

继续往里面SpringBootApplication跟,可以看到org.springframework.boot.autoconfigure.SpringBootApplication存在@EnableAutoConfiguration注解,自动配置就是由@EnableAutoConfiguration注解来进行实现的,如下图所示

跟到org.springframework.boot.autoconfigure.EnableAutoConfiguration里面,可以看到该EnableAutoConfiguration类还存在一个@Import({AutoConfigurationImportSelector.class})注解

@Import({AutoConfigurationImportSelector.class})注解就是自动配置主要的实现org.springframework.boot.autoconfigure.AutoConfigurationImportSelector,该翻译名称为自动配置导入选择器,如下图所示

当你使用@Import({AutoConfigurationImportSelector.class})注解后,Spring Boot的启动过程中会触发AutoConfigurationImportSelector类的selectImports方法。这个方法是用来确定哪些配置类需要被导入到当前的Spring容器中,如下图所示

AutoConfigurationImportSelector是Spring Boot自动配置机制的核心部分,它通过读取META-INF/spring.factories文件中的配置,来加载项目中所需要的自动配置类。

getAutoConfigurationEntry方法正是负责解析这些配置,并将它们作为@Configuration类导入到Spring容器中,从而实现自动配置的功能。

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法主要就是获取要导入的Configure类,如下图所示

跟进到org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法中可以看到,最终是通过org.springframework.core.io.support.SpringFactoriesLoader#loadFactoryNames来进行获取的,loadFactoryNames方法中先是拿到EnableAutoConfiguration的字符串名称,后续通过loadSpringFactories方法在当前ClassLoader中取出所有关于EnableAutoConfigure的注解的实现类,如下图所示

这边可以跟进到SpringFactoriesLoader来进行观察,loadSpringFactories方法会加载META-INF/spring.factories文件中所有的内容

跟进org/springframework/boot/spring-boot-autoconfigure/2.3.5.RELEASE/spring-boot-autoconfigure-2.3.5.RELEASE.jar!/META-INF/spring.factories中进行观察文件内容,可以看到相关的要加载的autoconfigure类都是跟上面中内容是一样的,如下图所示

流程总结图

AutoConfigure Demo编写实现

参考文章:https://gitcode.net/weixin_51407397/autoconfigdemo

posted @   zpchcbd  阅读(230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示