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类都是跟上面中内容是一样的,如下图所示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY