版权声明:转载请注明转载地址 https://blog.csdn.net/jiang297/article/details/82143817
异常情况如下:
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)
请检查三个配置文件
- spring-mvc.xml
- spring-context.xml
- 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>
想买云服务器的可以领个免费代金券,挺划算的:阿里云、腾讯云代金券领取地址