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

项目结构正确但Spring无法找到MessageRepository Bean问题求助

问题:Spring Boot启动报错,找不到MessageRepository类型的Bean

文件结构

文件结构截图

启动Spring Boot应用时始终报错,提示找不到MessageRepository类型的Bean,错误信息如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.redacted.project.service.MessageServiceImpl required a bean of type 'com.example.redacted.project.repositories.MessageRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.redacted.project.repositories.MessageRepository' in your configuration.


Process finished with exit code 1

试过同类问题的解决方案,没用。唯一能临时解决的是把主应用类和Repository放在同一个子文件夹,但这样会导致应用找不到其他组件,引发新问题。

已经给Repository加了@Repository注解,Service接口对应的实现类也尝试过配置相关注解,还试过用@ComponentScan,都没效果。

相关代码

主应用类

package com.example.redacted.project;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableAsync
public class Application extends SpringBootServletInitializer implements WebMvcConfigurer {

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

MessageRepository

package com.example.redacted.project.repositories;

import com.example.redacted.project.model.Message;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MessageRepository extends CrudRepository<Message, Long> {
}

MessageService接口

package com.example.redacted.project.service;

import com.example.redacted.project.model.Message;

public interface MessageService {
    Message getMessage();
    void setMessage(String message);
}

MessageServiceImpl实现类

package com.example.redacted.project.service;

import com.example.gegg.project.model.Message;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.example.redacted.project.repositories.MessageRepository;

@RequiredArgsConstructor
public class MessageServiceImpl implements MessageService {

    private final MessageRepository messageRepository;

    @Override
    public Message getMessage() {
        long id = 1;
        String message = String.valueOf(messageRepository.findById(id));
        return new Message();
        //return message.orElse(null);
    }

    @Override
    public void setMessage(String message) {
    }
}

MessageController

package com.example.redacted.project.controller;

import com.example.redacted.project.model.Message;
import com.example.redacted.project.service.MessageService;
import com.example.redacted.project.support.LogEndoint;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class MessageController {

    private final MessageService messageService;

    @LogEndoint
    @GetMapping("/message")
    public ResponseEntity<Message> getMessage(){
        return new ResponseEntity<>(messageService.getMessage(), HttpStatus.OK);
    }

    @LogEndoint
    @GetMapping("/status")
    public ResponseEntity<String> getStatus(){
        return new ResponseEntity<>("Service is good to go",HttpStatus.OK);
    }
}

解决方案

1. 补全Service实现类的Spring注解

你的MessageServiceImpl只加了@RequiredArgsConstructor,缺少@Service注解。Spring无法自动识别这个类为Bean,也就无法完成依赖注入,进而导致它依赖的MessageRepository无法被正确关联。

给MessageServiceImpl添加@Service注解:

@Service // 新增该注解
@RequiredArgsConstructor
public class MessageServiceImpl implements MessageService {
    // ... 原有代码
}

2. 修正Message类的包导入错误

在MessageServiceImpl中,你导入的Message类是com.example.gegg.project.model.Message,但其他类中使用的Message都是com.example.redacted.project.model.Message,包路径不一致会导致Spring无法正确识别实体类,影响Repository的扫描。

修正导入路径:

// 替换错误的导入语句
import com.example.redacted.project.model.Message;

3. 确保Repository被Spring Data扫描(可选)

虽然主应用类在com.example.redacted.project包下,Spring Boot默认会扫描该包及其子包,但如果仍有问题,可以显式添加@EnableJpaRepositories注解指定Repository所在包:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableAsync
@EnableJpaRepositories(basePackages = "com.example.redacted.project.repositories") // 新增该注解
public class Application extends SpringBootServletInitializer implements WebMvcConfigurer {
    // ... 原有代码
}

完成以上三步后重新启动应用,问题即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:24:57