我正试图编写一个简单的CRUD程序,我得到了这个错误。这个项目是基于我的项目。不知道我为什么不工作。
如果我注释掉构造函数,错误就会消失。我的房子里什么都没有。
有人能帮我一把吗?
Description:
Parameter 0 of constructor in com.example.FitApp3.controller.FoodController required a bean of type 'com.example.FitApp3.repository.FoodRepository' that could not be found.
Action:
Consider defining a bean of type 'com.example.FitApp3.repository.FoodRepository' in your configuration.
Process finished with exit code 1
这是我的代码:
实体/食品。JAVA
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Food extends com.example.FitApp3.model.Entity {
private String foodName;
private int foodKcal;
private int foodProtein;
private int foodCarb;
private int foodFat;
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public int getFoodKcal() {
return foodKcal;
}
public void setFoodKcal(int foodKcal) {
this.foodKcal = foodKcal;
}
public int getFoodProtein() {
return foodProtein;
}
public void setFoodProtein(int foodProtein) {
this.foodProtein = foodProtein;
}
public int getFoodCarb() {
return foodCarb;
}
public void setFoodCarb(int foodCarb) {
this.foodCarb = foodCarb;
}
public int getFoodFat() {
return foodFat;
}
public void setFoodFat(int foodFat) {
this.foodFat = foodFat;
}
}
仓库/FoodRepository.java
public interface FoodRepository extends CrudRepository<Food, Integer> {}
控制器/食物控制器。JAVA
@RestController
public class FoodController {
private FoodRepository foodRepository;
public FoodController(FoodRepository foodRepository) {
this.foodRepository = foodRepository;
}
}
主课
@SpringBootApplication
public class FitApp3Application {
public static void main(String[] args) {
SpringApplication.run(FitApp3Application.class, args);
System.out.println("hello world");
}
}
波姆。xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>FitApp3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>FitApp3</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我认为你只是对sping-jdbc、sping-data和sping持久性接口抽象有点困惑,让我来帮助你。TL; DR解决方案位于底部:
在FoodController
的构造函数中,您将FoodRepository
声明为参数,因此Spring必须在运行时找到此时的bean,以便创建FoodController
的bean。您已经声明了FoodRepository
并从CrudRepository
扩展它。我猜,你已经这样做了,假设Spring将在运行时创建一个FoodRepository
的实现(因为它扩展了CrudRepository
)。但是,不幸的是,它不是sping-core
模块,它将创建FoodRepsitory
的bean,也不是sping-jdbc
。这些接口是Spring数据项目的一部分。因此,对于创建类型为FoodRepository
的bean,负责类路径中的当前Spring数据项目(我的意思是,它可以是sping-data-jdbc
,sping-data-jpa
或其他任何类型)。这些接口(CrudRepository
,Repository
e. t. c.)对于所有的Spring数据项目都是通用的,所以它们是在sping-data-Commons
jar中提供的,这就是为什么您在类路径中可以使用它们,因为您已经包含了sping-data-Commons
显式:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.5.1</version>
</dependency>
另一件事是,这个启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
不使用spring数据project——它只提供spring jdbc、Hikari连接池和其他一些Spring Boot功能。换句话说,问题是在类路径中没有任何spring数据
项目,这就是为什么没有创建FoodRepository
bean的原因。
还要注意:@Entity
在这里没有意义,因为类路径中没有任何jpa持久性提供程序
解决方案:
为了解决这个问题,我建议你
pom中删除spring数据公用项
依赖项。xml
希望有帮助,祝你有愉快的一天!
您需要用spring boot starter数据jpa
替换spring boot starter jdbc
,如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
您可以查看以下链接,看看它们之间的区别,但基本上,JPA通过将数据库数据直接映射到Java对象来帮助您处理数据库数据:
你可以添加@Repository
注释到FoodRepository
接口。
@Repository
public interface FoodRepository extends CrudRepository<Food, Integer> {}
我正在浏览hibernate留档,文档说hibernate需要为我们所有的持久类提供一个no-arg构造函数: 无参数构造函数是所有持久类的要求;Hibernate必须使用Java反射为您创建对象。构造器可以是私有的,但是在没有字节码插装的情况下,运行时代理生成和有效的数据检索需要包或公共可见性。 但是当我通过创建一个没有任何无参数构造函数的POJO类并放置一个接受参数的构造函数来创建一个示例程序
启动我的应用程序时出现问题。有人能帮我解决这个问题吗? 总报告 GenericRepositoryImpl 图书仓库搜索 图书服务 图书服务简介
问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito
我试图构建一个包含getter和setter的构造函数,除了在参数中调用它之外,这些构造函数似乎对我的所有属性都很好。 当我读到这行代码时: 然后在控制台中出现以下错误: 构造函数flip(String)未定义构造函数flip(String)未定义 也许我错过了什么?
实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?
我使用的是jdk8,需要创建一个以类名作为构造函数参数的Spring组件。但是,使用我当前的代码,我遇到了运行时错误: 这是我的博客类: 这就是我尝试创建类的方式: 我可以了解一下创建该组件的正确方法/这里出了什么问题吗?提前感谢。