SpringBoot项目启动失败报错Annotation-specified bean name ‘xx‘ for bean class [xxx] conflicts with existing

问题描述

SpringBoot项目,更改项目内容和文件结构之后启动报错

Annotation-specified bean name ‘xx’ for bean class [xxx] conflicts with existing, non-compatible bean definition of same name and class[xxx]

问题分析

正在做的工作是将之前旧的项目进行功能拆分作为微服务独立出来, 其中一个部分在更新目录结构的过程中出现了工程中不同文件夹中复制了多分旧的工程的同一个文件的类,导致这一个工程当中有重名的两个甚至多个bean, 在启动时提示以上错误
关键字:Bean重复

问题解决

既然知道了问题原因,那么解决起来也比较简单,以使用Idea为例,通过菜单栏打开使用全局搜索选项或者使用快捷键
Ctrl+Shift+F来打开
打开全局搜索
查找提示中出现问题的类名,找到使用@Service\ @Controller \ @repository(要是集成了Mybatis一般就就可以忽略这个注解的)标注的重复类,此时如果不使用命名例如(@Service("xxx1Impl")),那么Spring会在扫描时,将类名首字母小写作为key,放到一个全局Map中维护就会出现重复问题
刪除重复的Bean

将不需要的类删除掉,问题解决。
如果确实需要保留重复的类,那么请将bean的名称进行重命名,确认Spring容器当中bean的名称不重复。在使用@Autowired自动装配的时候以Service层为例加上:

  1. 使用@Primary注解在Service层上 使用该注解的实现类会被优先注入
@Service
@Primary
public class DoMyJobServiceImpltwo implements DoMyJobService{
  @Override
  public String getJoboName() {
    return "横眉冷对千夫指";
  }
}

    
    
  1. 使用@Qualifier注解在Controller层与@Autowired共同使用,装配指定名称的bean

注意:使用@Qualifier注入指定Bean的时候,若没有指明Bean的名称,则其默认名称是首字母小写的类名

@RestController
public class ShowFakeNewsController {
  //此时已经不需要在DoMyJobServiceImpltwo上写@Primary注解了
  @Autowired
  @Qualifier("doMyJobServiceImpltwo")
  private VideoService videoService;
  @RequestMapping("/fakeNews")
  public String fakeNewsName(){
    return videoService.getFakeNewsName();
  }
}

    
    
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林寻星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值