Spring Boot应用启动失败

后端开发 2026-07-09

我在尝试启动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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章