Spring Boot Starter项目Jar包为何为空?依赖拉取与自动配置解析
关于Spring Boot空Starter的核心问题解析
一、空Starter如何拉取依赖?
这类没有代码和资源文件的Starter,本质是依赖聚合器,核心逻辑都写在构建配置文件里(Maven的pom.xml或Gradle的build.gradle)。
当你在项目中引入这类Starter的依赖时,Maven/Gradle等构建工具会自动解析它的依赖树:
- Starter的构建文件里已经声明了所有实现功能需要的依赖,包括对应的AutoConfigure模块、第三方业务库、基础依赖等
- 构建工具会把这些依赖自动下载到本地仓库,并引入到你的项目类路径中
举个实际例子:spring-boot-starter-web本身没有代码,但它的pom.xml里包含了spring-boot-starter、spring-web、spring-webmvc、spring-boot-starter-tomcat等依赖,这些才是真正提供Web功能的核心模块。
二、AutoConfigure如何识别所需类是否存在?
自动配置的逻辑并不在空Starter里,而是在单独的spring-boot-autoconfigure模块(或对应功能的AutoConfigure Jar包)中,核心靠条件注解和类路径扫描实现:
- 条件注解的作用
AutoConfigure模块里的配置类会使用一系列@Conditional相关注解,比如:
@ConditionalOnClass:检查类路径中是否存在指定的类,存在则生效当前配置@ConditionalOnMissingBean:检查容器中是否没有指定的Bean,没有则创建
- 类路径检查的原理
Spring会通过当前项目的ClassLoader尝试加载目标类:
- 如果能成功加载类(不抛出
ClassNotFoundException),就判定该类存在,满足条件注解的要求 - 反之则不满足,对应的配置类不会生效
比如WebMvcAutoConfiguration上标注了@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class}),当你通过Starter引入了spring-webmvc,这些类就会出现在类路径中,该配置类就会自动生效,帮你配置好Spring MVC的基础环境。
内容的提问来源于stack exchange,提问作者samshers
相关产品推荐
相关产品推荐

