ConflictingBeanDefinitionException异常解决

异常情况如下:

org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'testService' for bean class [com.xxx.service.TestService] conflicts with existing, non-compatible bean definition of same name and class [com.xxx.service.impl.TestServiceImpl]
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:320)
    at org.mybatis.spring.mapper.ClassPathMapperScanner.checkCandidate(ClassPathMapperScanner.java:236)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:259)
    at org.mybatis.spring.mapper.ClassPathMapperScanner.doScan(ClassPathMapperScanner.java:163)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.scan(ClassPathBeanDefinitionScanner.java:226)
    at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:317)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:123)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:682)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.rbsn.schedule.gateway.dubbo.DubboProvider.main(DubboProvider.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

请检查三个配置文件

  1. spring-mvc.xml
  2. spring-context.xml
  3. spring-context-dao.xml

即三个地方的配置
1、spring-mvc中

<context:component-scan base-package="com.xxx"><!-- base-package 如果多个,用“,”分隔 -->
</context:component-scan>

2、spring-context.xml

<context:component-scan base-package="com.xxx"><!-- base-package 如果多个,用“,”分隔 -->
</context:component-scan>

3、spring-context-dao.xml

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xxx"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

原因:
这三个文件中分别扫描注解类进行加载,扫描的包都是com.xxx,所以有重复加载类的问题最后导致报冲突

改进措施:
1、spring-mvc中
扫描controller对应包

<context:component-scan base-package="com.xxx.controller"><!-- base-package 如果多个,用“,”分隔 -->
</context:component-scan>

或者只扫描Controller

<context:component-scan base-package="com.xxx"><!-- base-package 如果多个,用“,”分隔 -->
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

2、spring-context.xml
扫描service对应包

<context:component-scan base-package="com.xxx.service"><!-- base-package 如果多个,用“,”分隔 -->
</context:component-scan>

或者扫描service等类时排除controller

<context:component-scan base-package="com.xxx"><!-- base-package 如果多个,用“,”分隔 -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

3、spring-context-dao.xml
扫描dao对应包

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xxx.dao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

或者加上扫描的识别接口类markerInterface,这个BaseDao需要自己定义

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xxx"/>
    <property name="markerInterface" value="com.xxx.common.base.BaseDao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

想买云服务器的可以领个免费代金券,挺划算的:阿里云、腾讯云代金券领取地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值