Java 我能';t autowire存储库在春天

Java 我能';t autowire存储库在春天,java,spring,spring-mvc,spring-data,noclassdeffounderror,Java,Spring,Spring Mvc,Spring Data,Noclassdeffounderror,我正在尝试使用spring注释在controller中自动连接存储库。我发现错误org.springframework.data.repository.query.QueryByExampleExecutor类未找到,无法找到解决方案 我得到的错误: 严重:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例时发生异常 org.springframework.beans.factory.BeanCreat

我正在尝试使用spring注释在controller中自动连接存储库。我发现错误
org.springframework.data.repository.query.QueryByExampleExecutor类未找到
,无法找到解决方案

我得到的错误:

严重:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例时发生异常
org.springframework.beans.factory.BeanCreationException:创建名为“articleController”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org.springframework.beans.factory.beancreatitionException:无法自动关联字段:private com.payforeign.article.ArticleRepository com.payforeign.article.ArticleController.repository;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“articleRepository”的bean时出错:调用init方法失败;嵌套的异常是java.lang.NoClassDefFoundError:org/springframework/data/repository/query/QueryByExampleExecutor
控制器

package com.payforeign.article;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.RequestMapping;
@控制器
@请求映射(“/service”)
公共类控制器{
@自动连线
私有知识库;
//控制器方法
}
存储库

我用
@repository
注释了存储库。根据spring文档,我只有存储库接口。对吗

package com.payforeign.article;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
@存储库
公共接口ArticleRepository扩展了Crudepository{}
applicationContext.xml

我已经将
jpa:repositories
与正确的
基本包
组件扫描
一起包括在内。我已经指定它是注释驱动的(
),并添加了JDBC和JPA设置。我的applicationContext.xml已从web.xml正确加载


尝试在applicationContext.xml中添加此配置


请更改

<context:component-scan base-package="com.payforeign,com.payforeign.article" />



它是使用此文件定义基本包的,您com.payforeign.article将自动扫描

您的问题是依赖关系

你要找的班级在这里:

如您所见,SpringDataJPA的最新版本已经有了它,因此您应该将失败的Delendence升级到最新版本,或者将SpringDataJPA版本降级一点(不推荐)

在我的应用程序中,spring boot和mongoDB jpa存储库也存在类似的问题

例如,我有spring数据jpa和spring数据mongodb依赖项:


org.springframework.boot
spring引导启动器数据jpa
org.springframework.data
spring数据mongodb
1.9.2.1发布
但是spring boot spring boot starter数据jpa隐式使用了比1.9.2.0版本更旧的spring数据mongodb版本。
最简单的修复方法是将spring data mongodb降级到1.8.4.RELEASE版本。

如果
spring data commons
的版本比
spring data jpa
所需的版本旧,则可能会遇到
NoClassDefFoundError
。这个异常几乎总是意味着版本不匹配(依赖性地狱)。下面是一个如此糟糕的依赖组合的示例:


org.springframework.data
spring数据共享
1.6.2.1发布
org.springframework.data
spring数据jpa
1.11.8.1发布

解决方案非常简单,只需从项目依赖项中删除
spring数据公用项
(无论如何,您不需要显式指定此库,因为它是
spring数据jpa的可传递依赖项).

堆栈跟踪很清楚:您的类路径中缺少Spring数据jar。
NoClassDefFoundError
几乎总是意味着版本不匹配。在这种情况下,我相信您需要RC版本(或者至少是最新版本)来通过示例获取查询。我已经将
spring data commons
从1.11.4版升级到1.12.1版,并解决了这个问题。感谢@chrylisAccording对
的回答,可以完成
的工作,因此不需要注释配置。我从我的pom中引用了多个spring数据依赖项,即spring boot starter数据jpa和spring boot starter数据rest,这导致了问题。在我的案例中,移除不需要的组件解决了这个问题。这个答案帮助我得到了这个想法。
<context:component-scan base-package="com.payforeign" />