spring 依赖 Unexpected exception parsing XML document from class path resource [beans-annotation.xml]

用注解配置 Spring 时 ,出现以下错误


错误代码 :

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans-annotation.xml]; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:413)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.cyg.spring.beans.annotation.Main.main(Main.java:20)
Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
    at org.springframework.context.annotation.AnnotationConfigUtils.registerAnnotationConfigProcessors(AnnotationConfigUtils.java:194)
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.registerComponents(ComponentScanBeanDefinitionParser.java:150)
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:86)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1424)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1414)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:141)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
    ... 14 more
Caused by: java.lang.ClassNotFoundException: org.springframework.aop.TargetSource
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 25 more

错误原因:缺少一个依赖 jar包 : spring-aop-4.0.0.RELEASE.jar

百度云下载 :   链接:  https://pan.baidu.com/s/1eTiNADk    密码: 7m5j

然后导入就好了



eclipse 导入方法 :

1. 右键点击你的工程项目,选中Build Path

2. 选中Libraries->configure Build Path

3.点击Add External  JARS ,找到刚刚导入的依赖文件就好了

ERROR [main] org.springframework.web.context.ContextLoader Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'commentService' for bean class [com.xhxy.eshop.service.impl.mybatis.CommentServiceImpl] conflicts with existing, non-compatible bean definition of same name and class [com.xhxy.eshop.service.impl.jdbc.CommentServiceImpl] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:417) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:338) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:196) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:232) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:203) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[spring-web-5.3.15.jar:5.3.15] at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[spring-web-5.3.15.jar:5.3.15] at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshab
最新发布
03-25
<think>好的,我现在需要解决用户在Spring框架中遇到的ConflictingBeanDefinitionException异常,特别是由CommentServiceImpl类引起的问题。用户提到了mybatis、jdbc和applicationContext.xml,可能需要检查相关配置。首先,我需要回忆这个异常通常发生的原因。 ConflictingBeanDefinitionException通常是因为Spring容器中存在多个相同名称或类型的Bean定义。用户的问题中涉及到'commentService',说明可能有多个Bean被命名为commentService,或者在组件扫描时发现了重复的类。 接下来,我需要考虑用户提供的引用内容。引用[3]中提到了CommentService接口和CommentServiceImpl实现类。用户可能在实现类上没有正确使用@Service注解,或者没有指定Bean的名称,导致Spring在扫描时创建了多个实例。另外,引用[1]和[2]提到了applicationContext.xml和MyBatis的配置,可能存在XML配置文件中重复定义了commentService的Bean。 可能的解决步骤包括: 1. 检查CommentServiceImpl类是否使用了@Service注解,并确保没有在其他地方(如XML配置)重复定义该Bean。 2. 检查组件扫描的包路径是否正确,避免重复扫描导致多次注册。 3. 查看MyBatis的Mapper扫描配置,确保没有误将Service类作为Mapper接口处理。 4. 检查是否有通过@Bean注解或其他方式手动创建了commentService的实例,导致冲突。 还需要考虑用户是否在applicationContext.xml中同时使用了注解和XML配置来定义同一个Bean,这也会导致冲突。此外,如果用户使用了@MapperScan,需要确认扫描的包路径是否只包含Mapper接口,而不包含Service类,避免MyBatis和Spring同时创建Bean。 可能的解决方案包括统一使用注解或XML配置,避免混合使用;检查并修正组件扫描的范围;使用@Qualifier指定Bean名称等。另外,查看异常堆栈信息中的具体位置,帮助定位问题根源。</think>### 解决Spring中ConflictingBeanDefinitionException的步骤 #### 1. 确认Bean名称冲突来源 `ConflictingBeanDefinitionException`表明存在重复的Bean定义。针对`commentService`冲突: - **检查XML配置**:在`applicationContext.xml`中搜索`<bean id="commentService">`,确认是否手动定义了同名Bean[^1]。 - **检查注解声明**:确保`CommentServiceImpl`类**仅使用一种方式声明Bean**(如`@Service("commentService")`或XML配置),避免混合使用注解和XML重复定义。 #### 2. 规范组件扫描范围 - **检查组件扫描路径**:若使用`@ComponentScan`或XML的`<context:component-scan>`,确保未重复扫描同一包。例如: ```xml <!-- applicationContext.xml --> <context:component-scan base-package="com.aaa.service,com.aaa.dao"/> <!-- 避免包含已通过其他方式注册的包 --> ``` - **检查MyBatis Mapper扫描**:`@MapperScan`应仅扫描Mapper接口包,例如`@MapperScan("com.aaa.dao")`,若扫描范围包含Service类会导致冲突[^2]。 #### 3. 检查Bean命名策略 - **显式指定Bean名称**:在`CommentServiceImpl`类上添加`@Service("commentService")`,覆盖默认命名规则: ```java @Service("commentService") // 显式定义Bean名称 public class CommentServiceImpl implements CommentService {...} ``` - **检查接口实现类命名**:若存在多个`CommentService`实现类(如测试类或旧版本残留),需排除无关类。 #### 4. 验证MyBatis代理冲突 - **Mapper接口与Service类隔离**:确保Mapper接口(如`CommentMapper`)与Service类(如`CommentServiceImpl`)不在同一包下,避免MyBatis误将Service类作为Mapper代理[^4]。 #### 5. 检查依赖注入方式 - **字段注入与构造器注入**:避免在XML和注解中同时注入同一Bean。例如: ```xml <!-- 错误示例:XML中定义Bean --> <bean id="commentService" class="com.aaa.service.CommentServiceImpl"/> ``` ```java // 错误示例:同时使用注解声明 @Service public class CommentServiceImpl {...} ``` #### 6. 清理编译结果并重启 - 执行Maven/Gradle的`clean`任务,删除`target/`或`build/`目录,重新编译项目。IDE缓存可能导致旧Bean定义残留。 --- ### 示例修正代码 **CommentServiceImpl.java** ```java @Service("commentService") // 显式命名 public class CommentServiceImpl implements CommentService { @Autowired private CommentMapper commentMapper; // 确保Mapper已被正确扫描 // 实现方法... } ``` **applicationContext.xml**(如有) ```xml <!-- 移除手动定义的commentService Bean --> <!-- 保留组件扫描配置,但范围不包含Service层 --> <context:component-scan base-package="com.aaa.dao"/> ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cygcsdn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值