Spring Boot自定义自动配置Bean未创建问题求助
spring.factories 配置错误或未被打包入Jar
必须确保resources/META-INF/spring.factories的键是org.springframework.boot.autoconfigure.EnableAutoConfiguration,值为配置类的全限定名,示例格式:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.custom.client.CustomClientAutoConfiguration注意全类名不能写错,多配置类时用
\换行。同时要确认打包时这个文件被正确打进Jar——比如Maven/Gradle的资源目录配置是否正确,有没有把src/main/resources下的文件排除在外。配置类被条件注解限制
如果CustomClientAutoConfiguration上标注了@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,要核对条件是否满足:比如@ConditionalOnClass指定的类是否存在于依赖中,或者是否已有同类型的Bean导致@ConditionalOnMissingBean触发,让当前配置类不生效。Bean定义写法错误
检查CustomClientAutoConfiguration里的Bean定义:- 方法是否标注了
@Bean注解? - 方法返回类型是否为
CustomTemplateClient? - 方法是否为public修饰?
正确示例:
@Configuration public class CustomClientAutoConfiguration { @Bean public CustomTemplateClient customTemplateClient() { return new CustomTemplateClient(); } }- 方法是否标注了
自动配置被主动排除
查看引入该库的Spring Boot项目,是否在@SpringBootApplication或@EnableAutoConfiguration中通过exclude属性排除了CustomClientAutoConfiguration,比如:@SpringBootApplication(exclude = CustomClientAutoConfiguration.class)这种情况会直接跳过你的自动配置类加载。
构建工具的打包配置问题
比如Maven的pom.xml是否正确配置了资源插件,确保src/main/resources下的文件被包含;Gradle是否正确设置了sourceSets的资源目录。如果spring.factories放在错误目录(比如src/resources而非src/main/resources),打包后Jar里就没有这个文件,自动配置自然不生效。
内容的提问来源于stack exchange,提问作者Sk Monjurul Haque

