ConflictingBeanDefinitionException: Annotation-specified bean name ‘XXX‘ for bean class

报错信息

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'mybatisInterceptor' for bean class [com.sinandata.service.commons.config.MybatisInterceptor] conflicts with existing, non-compatible bean definition of same name and class [com.sinandata.kg.report.config.MybatisInterceptor]
	at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349)
	at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287)
	at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)
	at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296)
	at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
	at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207)
	at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175)

这个错误是因为在 Spring context 中有两个名称相同但类不兼容的 bean 定义而引起的。在您的项目中,有两个 XXX类被定义,并且都使用了相同的 bean 名称XXX,这导致了冲突。

如果该两个Bean都是你自己定义的,可以通过以下几种方式解决:

  1. 修改 bean 名称 - 将其中一个 MybatisInterceptor 的 bean 名称修改为不同的名称,避免名称冲突。

  2. 区分类名或包名 - 将两个 MybatisInterceptor 类的类名或所在包名进行区分,以避免类名冲突。

  3. 使用 @Qualifier 注解 - 在注入 bean 的过程中,使用 @Qualifier 注解指定要注入的具体 bean,而不是使用默认名称。例如:@Autowired @Qualifier(“mybatisInterceptor1”) private MybatisInterceptor mybatisInterceptor;

如果其中一个是外部Jar包自带的依赖Bean,则通过以下方式排除Bean:
在启动类上加上注解
@ComponentScan( excludeFilters = [ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = [MybatisInterceptor.class()])])

解释:
 在 Spring 框架中,@ComponentScan 注解用于搜索标有 @Component、@Service、@Controller、@Repository 等注解的类,并将它们注册为 Spring 容器中的 Bean。有时候,您可能希望排除某些类,比如第三方库的类或者框架自带的类,以避免造成冲突。

 excludeFilters 属性是 @ComponentScan 注解的一个元素,可以用来指定要排除的类。其中,Filter 是一个枚举类型,包含四个过滤器类型:ANNOTATION、ASSIGNABLE_TYPE、ASPECTJ 和 CUSTOM。

 在提供的代码中,excludeFilters 属性使用了 ASSIGNABLE_TYPE 类型的过滤器,并指定了一个名为 MybatisInterceptor 的类。这意味着,如果某个类和 MybatisInterceptor 类型相同,它将被排除在扫描范围外,不会被注册为 Spring 容器中的 Bean。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException报错是由于存在重复的bean定义***com.compass.core.hanlder.BaseExceptionHandle]不兼容。这个错误通常发生在Spring Boot项目启动时,当存在相同名称但不兼容的bean定义时会触发该异常。 为解决这个问题,可以考虑以下方法: 1.检查项目中的bean定义,确保没有重复的名称或类。可以使用IDE的搜索功能来查找所有包含问题bean名称的地方。 2.如果确实存在相同名称但不兼容的bean定义,可以通过更改bean名称或类名来解决冲突。 3.另外,你也可以使用@ComponentScan注解的excludeFilters属性来排除掉不需要的bean定义,或者使用includeFilters属性来只包含需要的bean定义。这样可以更精确地控制项目中的bean扫描。 综上所述,Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException报错是由于存在重复的bean定义导致的。解决这个问题的方法包括检查重复的bean定义并进行修正,以及使用@ComponentScan注解的excludeFilters和includeFilters属性进行精确控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException Annotation 报错...](https://blog.csdn.net/weixin_42717648/article/details/128582047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值