当前位置: 首页 > 知识库问答 >
问题:

存储库上的奇怪Spring Boot@Autowired错误不是由于错误的项目结构或缺少注释

严修诚
2023-03-14

我问这个问题有可能被标记为重复,但我真的不这么认为,所以就这样问吧。

我在运行基本的Spring Boot应用程序时遇到问题。我得到的错误是:

com.example.demo.service.EventService中构造函数的参数0需要找不到类型为'com.example.demo.dao.EventRepository'的bean。

现在,这似乎是一个非常常见的错误(以及问题),开发人员应该检查以下问题:

  1. 最常见的是项目结构错误(或者让我们说“自定义”)并且由于层次结构[问题:这个、这个、这个、这个,可能还有更多]而无法扫描bean。解决方案应该是将SpringBootApplication放在顶部包中,并将所有组件放在其子包中,以便它可以正确扫描所有内容或自定义需要扫描的包。
  2. 未定义bean,即缺少@Service、@Repository等类型的注释,因此未创建bean。
  3. 另一个原因可能是使用两种不同的定义bean的方法(如这里发布的)。我使用的是纯注释风格的定义,所以我认为我应该在这里很好。

此外,这个问题的答案提到从application.properties文件中排除JPA存储库的自动配置,但我没有设置此配置。

还有几个问题/答案提到了依赖性和pom的问题。修复此问题的xml文件,但我的pom。xml是从Spring初始值设定项创建的一个非常基本的文件,所以我认为这不是解决方案。

错误消息还显示:

考虑在配置中定义com.example.demo.dao.EventRepository类型的bean。

“缺少的bean”是此存储库:

package com.example.demo.dao;

import com.example.demo.entity.Event;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EventRepository extends JpaRepository<Event, Integer> {
}

您可以看到它有@Repository注释(虽然我以前创建的存储库没有这个注释,而且它工作得很好,所以我认为这不是必需的,但我现在添加了它,以防出现问题),它扩展了JpaRepository,所以它应该是一个有效的存储库,并且它位于com内部。实例演示。dao包。

自动连接这是一项服务的类:

package com.example.demo.service;

import com.example.demo.dao.EventRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EventService {

    EventRepository eventRepository;

    @Autowired
    public EventService(EventRepository eventRepository) {
        this.eventRepository = eventRepository;
    }
}

我还将提供主应用程序,以便您可以看到它的包com.example.demo它是服务和存储库的父包:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

我还尝试过重建这个项目和臭名昭著的IntelliJ的“关闭和重新开放”,因为根据我的经验,它有时表现得很愚蠢,这会解决问题,但这次不会。

另外,我之前已经成功创建了这类项目,所以我真的不确定现在的问题是什么。

我错过了什么明显的东西吗?我还能查什么?

编辑:

这也是实体类(由IDE工具生成):

package com.example.demo.entity;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Objects;

@Entity
public class Event {
    private int id;
    private String name;
    private Timestamp dateFrom;
    private Timestamp dateTo;

    // getters & setters abstracted
}

共有1个答案

戚哲
2023-03-14

原来这是pom的问题。毕竟是xml。

我后来添加了JPA依赖项,但不小心添加了错误的依赖项。Mypom。xml

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>

而不是

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

显然,用于从表生成实体的IDE工具缺少javax。持久性,所以它通过lib文件夹手动添加了jar。IntelliJ觉得一切都很好,但依赖关系之间有些混乱。

无论如何,我更改了pom.xml中的依赖项,并删除了添加的额外jar。现在一切正常。

 类似资料:
  • 我一直在尝试将Zendesk添加到我的swift项目中,并一直在尝试遵循以下步骤: https://developer.zendesk.com/embeddables/docs/ios_support_sdk/sdk_add#使用cocoapods添加-the-sdk-white 我已经使用以下命令添加了pod: 并将其添加到我的项目的: 但是,当我尝试运行我的项目时,我得到了这个错误: 我一直在

  • 所以我在做这个素数家庭作业,举了一个很好的例子,我想我已经把大部分都记下来了。我遇到的一件事是“公共静态空隙筛(int n)”一行的错误,这也发生在“私有静态int twinPrime()”中 代码如下: 以下是错误: void是变量筛的无效类型 预期令牌 "(", ; 语法错误 令牌 “)” 上的语法错误, ;预期 和 标记“int”语法错误,应为@ 语法错误,请插入“EnumBody”以完成B

  • 问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我

  • 我最近升级了我的解决方案和项目以使用.Net 6,并切换到使用Visual Studio 2022。自从升级之后,我无法生成某些项目。 我有编译器错误,因为缺少引用,即使这些包看起来包含在内... 我尝试过通过nuget删除和添加包,清理和重建项目。我不明白为什么在项目构建的时候不去接他们。 从我的解决方案的根目录中删除了. vs文件夹。 还尝试从... 更新 我通过nuget为添加了对该项目的进

  • 问题内容: 继承人错误: 这是导致它的代码: 图标是文件数组。奇怪的是,我的计算机可以在任何图像查看器中正常读取图像。谷歌搜索错误没有给我任何结果。我有很多图像需要阅读,因此除了将图像转换为BufferedImage之外,它们是获取图像尺寸的一种替代方法吗?这样可以解决问题吗?有没有办法修复这些图像?我是通过从iOS设备收集应用程序图标来获得它们的。使用我自己的设备进行的测试没有产生任何错误,尽管

  • 问题内容: 我目前正在开发一个纯粹的HTML和JavaScript驱动的Web应用程序,该应用程序使用CORS来使用远程Web服务,但目前在IE 11发出GET请求时遇到了麻烦。有趣的是,我们在IE8 / 9/10中可以正常运行,而不仅仅是11。 问题是IE 11似乎超时,而不是等待服务器的响应。ajax调用很简单: 在“网络”选项卡中,使用Fiddler,我可以看到IE从不发送请求。 请问有人有