You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中DriverService类型Bean找不到问题求助

解决Spring Boot中DriverService Bean找不到的问题

问题描述

启动Spring Boot应用时出现以下错误:
Field driverService in com.example.accounting.controller.ClientController required a bean of type 'com.example.accounting.service.DriverService' that could not be found.

解决方案

1. 给实现类添加@Service注解

Spring无法识别DriverServiceImplementation作为Bean,因为它没有标注@Service注解。在实现类上添加该注解,让Spring把它纳入容器管理:

package com.example.accounting.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.accounting.model.Driver;
import com.example.accounting.repo.DriverRepo;

@Service
public class DriverServiceImplementation implements DriverService{
    
    @Autowired
    private DriverRepo driverRepo;

    @Override
    public Driver createDriver(Driver driver) {
        return driverRepo.save(driver);
    }

    @Override
    public List<Driver> getDrivers() {
        return (List<Driver>) driverRepo.findAll();
    }

    @Override
    public Driver getDriverById(String DL_Number) {
        return driverRepo.findById(DL_Number).get();
    }

    @Override
    public void deleteDriver(String DL_Number) {
        driverRepo.deleteById(DL_Number);
    }

    @Override
    public Driver updateDriver(Driver driver, String DL_Number) {
        Driver driver1 = driverRepo.findById(DL_Number).get();
        driver1.setCell(driver.getCell());
        driver1.setCompanyName(driver.getCompanyName());
        driver1.setDOB(driver.getDOB());
        driver1.setDriving_Under(driver.getDriving_Under());
        driver1.setEmail(driver.getEmail());
        driver1.setFirstname(driver.getFirstname());
        driver1.setLastname(driver.getLastname());
        driver1.setPrepass(driver.getPrepass());
        driver1.setDL_State(driver.getDL_State());
        driver1.setStatus(driver.getStatus());
        return driverRepo.save(driver1);
    }
}

2. 移除接口上的@Service注解

DriverService是接口,不需要被Spring实例化,所以要去掉接口上的@Service注解,同时修正方法参数的拼写错误(原接口中updateDriver的参数DL_NumbeString是笔误,改为DL_Number):

package com.example.accounting.service;

import java.util.List;

import com.example.accounting.model.Driver;

public interface DriverService {
    Driver createDriver(Driver driver);

    List<Driver> getDrivers();

    Driver getDriverById(String DL_Number);

    void deleteDriver(String DL_Number);

    Driver updateDriver(Driver driver, String DL_Number);
}

3. 确认主类的扫描范围

确保你的Spring Boot主类位于com.example.accounting包下(或更上层包),这样Spring会自动扫描子包中的controller、service、repo类。如果主类在其他包,需添加@ComponentScan指定扫描路径:

@SpringBootApplication
@ComponentScan(basePackages = "com.example.accounting")
public class AccountingApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountingApplication.class, args);
    }
}

补充说明

之前尝试直接注入DriverServiceImplementation仍出错,是因为该实现类同样没有@Service注解,Spring无法找到它。最佳实践是注入接口而非实现类,这符合面向接口编程的思想,后续更换实现类时无需修改Controller代码。

内容的提问来源于stack exchange,提问作者Daniel Ortlieb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:24:53