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类都是跟上面中内容是一样的,如下图所示

流程总结图


浙公网安备 33010602011771号