您的位置:首页 > 新闻 > 热点要闻 > SpringBoot 3的两种SPI加载方式

SpringBoot 3的两种SPI加载方式

2024/10/30 13:01:25 来源:https://blog.csdn.net/Mr_rain/article/details/140868028  浏览:    关键词:SpringBoot 3的两种SPI加载方式

从spring boot 2.7.0发布后, 自动配置类的加载方式就发生了改变,原来从META-INF/spring.factories文件中加载,变为了从META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中加载,对应的加载实现类发生了改变,两者的加载实现类如下:

加载类加载文件
org.springframework.core.io.support.SpringFactoriesLoaderMETA-INF/spring.factories
org.springframework.boot.context.annotation.ImportCandidatesMETA-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

SpringFactoriesLoader

目前像org.springframework.context.ApplicationContextInitializer, org.springframework.boot.SpringApplicationRunListener, 以及org.springframework.context.ApplicationListener等SPI仍是由SpringFactoriesLoader进行加载,这部分没有变化。

但是原来的org.springframework.boot.autoconfigure.EnableAutoConfiguration已经从spring.factories中移徐,即不再由SpringFactoriesLoader进行加载,而是换成由ImportCandidates进行加载。

ImportCandidates

从类注释上说明,该类从springboot 2.7开始用于自动配置类的import逻辑:
// todo ImportCandidates类注释截图

用于加载的load(Class<?> annotation, ClassLoader cl)方法的加载逻辑也很清晰,指定Annotation类,从固定路径中加载相应的SPI扩展类:
在这里插入图片描述

以自动配置类为例,对应的Annotation类为org.springframework.boot.autoconfigure.AutoConfiguration, 加载路径就是:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

这部分处理逻辑在AutoConfigurationImportSelector.getAutoConfigurationEntry(AnnotationMetadata)方法中,该方法主要获取自动配置的入口:
在这里插入图片描述
在这里插入图片描述

后续

目前可能有其它的API也是由ImportCandidates加载,但没有继续深入了, 在以后也将会有越来越多的SPI扩展由ImportCandidates加载,所以简单的对ImportCandidates进行了了解和分析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com