Spring中同名类引发Bean冲突的解决方法
解决Spring Boot中同名配置类的Bean冲突问题
从报错信息能明确看到,项目依赖中的com.learnyeai.common.redis.RedisConfig和你自己项目里的com.learnyeai.jsstudy.config.RedisConfig,都被Spring自动扫描并注册成了名为redisConfig的Bean,因为名称重复且不兼容,导致启动失败。
给你几个可行的解决办法:
重命名自定义配置类的Bean名称
直接在自己项目的RedisConfig类上,修改@Configuration注解的名称属性,指定一个唯一的Bean名,比如:@Configuration("jsstudyRedisConfig") public class RedisConfig { // 原有代码逻辑保持不变 }这样Spring会用你指定的名称注册这个Bean,自然就不会和依赖里的同名Bean冲突了。
排除依赖中的配置类被扫描
如果根本不需要依赖里的RedisConfig生效,就在启动类的@ComponentScan里排除它:@SpringBootApplication @ComponentScan(excludeFilters = @ComponentScan.Filter( type = FilterType.ASSIGNABLE_TYPE, value = com.learnyeai.common.redis.RedisConfig.class )) public class BaseApiApplication { public static void main(String[] args) { SpringApplication.run(BaseApiApplication.class, args); } }要是这个配置类是通过依赖的自动配置引入的,也可以在配置文件里排除:
# application.properties spring.autoconfigure.exclude=com.learnyeai.common.redis.RedisConfig缩小组件扫描范围
调整启动类的扫描范围,只扫你自己项目的包,别扫到依赖里的配置类:@SpringBootApplication(scanBasePackages = "com.learnyeai.jsstudy") public class BaseApiApplication { public static void main(String[] args) { SpringApplication.run(BaseApiApplication.class, args); } }这样Spring只会加载
com.learnyeai.jsstudy下的类,不会碰依赖里的那个RedisConfig。用@Primary强制优先(谨慎使用)
如果必须保留两个配置类,但想让自己项目的生效,可以在自定义的RedisConfig上加@Primary注解:@Configuration @Primary public class RedisConfig { // 原有代码 }注意:这种方式会覆盖依赖里的Bean,可能引发其他隐性问题,非必要别用。
内容的提问来源于stack exchange,提问作者BIGSHAOSHI
相关产品推荐
相关产品推荐

