Spring Boot应用启动失败
我在尝试启动Spring Boot应用时遇到这个错误。
org.codefinity.com.codefinity.firstrestapibooks.controller.BookController的构造函数的第一个参数需要一个类型为 'org.codefinity.com.codefinity.firstrestapibooks.service.BookService' 的Spring Bean,但找不到该Bean
以下是我的BookController类
package org.codefinity.com.codefinity.firstrestapibooks.controller;
import lombok.AllArgsConstructor;
import org.codefinity.com.codefinity.firstrestapibooks.DTO.BookRequestDTO;
import org.codefinity.com.codefinity.firstrestapibooks.DTO.BookResponseDTO;
import org.codefinity.com.codefinity.firstrestapibooks.model.Book;
import org.codefinity.com.codefinity.firstrestapibooks.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("/books")
public class BookController {
@Autowired
private final BookService bookService;
public BookController(BookService bookService){
this.bookService = bookService;
}
@GetMapping
public List<BookResponseDTO> findAllBooks(){
return bookService.findAllBooks();
}
@PostMapping
public BookResponseDTO createBook(@RequestBody BookRequestDTO book){
return bookService.createBook(book);
}
@PutMapping("/{id}")
public BookResponseDTO updateBook(@PathVariable String id, @RequestBody BookRequestDTO book){
return bookService.updateBook(id, book);
}
@DeleteMapping("/{id}")
public void deleteBook(@PathVariable String id){
bookService.deleteBook(id);
}
}
下面是我的BookServiceImpl类
package org.codefinity.com.codefinity.firstrestapibooks.service;
import lombok.AllArgsConstructor;
import org.codefinity.com.codefinity.firstrestapibooks.DTO.BookRequestDTO;
import org.codefinity.com.codefinity.firstrestapibooks.DTO.BookResponseDTO;
import org.codefinity.com.codefinity.firstrestapibooks.DTO.MapperBook;
import org.codefinity.com.codefinity.firstrestapibooks.model.Book;
import org.codefinity.com.codefinity.firstrestapibooks.repository.BookRepository;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookServiceImpl {
private final BookRepository bookRepository;
public BookServiceImpl(BookRepository bookRepository){
this.bookRepository = bookRepository;
}
List<BookResponseDTO> findAllBooks() {
return bookRepository.getAllBooks().stream()
.map(MapperBook::modelToRespondDto)
.toList();
}
public BookResponseDTO createBook(BookRequestDTO book) {
Book modelBook = MapperBook.dtoRequestoModel(book);
Book repositoryBook = bookRepository.addBook(modelBook);
return MapperBook.modelToRespondDto(repositoryBook);
}
public BookResponseDTO updateBook(String id, BookRequestDTO book) {
Book modelBook = MapperBook.dtoRequestoModel(book);
Book repositoryBook = bookRepository.updateBook(id, modelBook);
return MapperBook.modelToRespondDto(repositoryBook);
}
public void deleteBook(String id) {
bookRepository.deleteBook(id);
}
}
以下是我的pom.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>4.0.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.codefinity</groupId>
<artifactId>first-rest-api-books</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>com.codefinity.firstrestapiooks</name>
<description>com.codefinity.firstrestapiooks</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>25</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
<version>4.1.0-RC1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>4.1.0-RC1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<version>4.1.0-RC1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.46</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我不确定该如何修复这个问题,因为我已经搜索过,但没有看到任何线索。非常感谢任何帮助。
解决方案
问题在于你的 BookServiceImpl 类需要实现 BookService 接口。现在,Spring无法找到类型为 BookService 的Spring Bean,因为你的实现类尚未与该接口建立关联。
添加 implements BookService。
@Service
public class BookServiceImpl implements BookService { // ⬅️
private final BookRepository bookRepository;
public BookServiceImpl(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
// ... rest of your code
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。