You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:20:43