当前位置: 首页 > 知识库问答 >
问题:

SpringBoot:未满足的依赖项NoSuchBean定义异常,预计至少有1个bean符合自动配线候选资格

符鸣
2023-03-14

我犯了一个非常愚蠢的错误,但不知道如何解决。

我有一个简单的使用profiles的SpringBoot应用程序,它连接到MongoDb。

我的 pom.xml依赖关系:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

My StudentController.java

@RestController
@RequestMapping("/students")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping(method = RequestMethod.GET)
    public Collection<Student> getAllStudents(){
        return studentService.getAllStudents();
    }
}

我的StudentService.java

@Service
public class StudentService {

    @Autowired
    private StudentDao studentDao;

    public Collection<Student> getAllStudents(){
        return this.studentDao.getAllStudents();
    }
}

这是我的学生刀。java接口:

public interface StudentDao {
    Collection<Student> getAllStudents();
}

我的MongoStudentDaoImpl.java:

@Repository
@Profile("test")
public class MongoStudentDaoImpl implements StudentDao {

    @Autowired
    private MongoStudentRepo repo;

    @Override
    public Collection<Student> getAllStudents() {
        return repo.findAll();
    }
}

我的MongoStudentRepo.java:

@Profile("test")
public interface MongoStudentRepo extends MongoRepository<Student, String> {
}

当我尝试使用“test”配置文件启动应用程序时,以下是我看到的错误:

在上下文初始化期间遇到异常 - 取消刷新尝试: org.springframework.beans.factory.不满意依赖性异常: 创建名称为“学生控制器”的 Bean 时出错: 通过字段“学生服务”表示的不满意的依赖关系;嵌套的例外是组织.Spring框架.豆.工厂.不满意依赖性异常:创建名称为“学生服务”的bean时出错:通过字段“学生道”表示的不满意的依赖关系;嵌套的例外是组织.springframework.beans.factory.不满意的依赖性异常:创建名称为“mongoStudentDao”的bean时出错:通过字段“repo”表示的不满意的依赖关系;嵌套的例外是组织.Spring框架.豆子.工厂.NoSuchBean定义异常:没有“MongoStudentRepo”类型的合格豆可用:预计至少有1个豆子有资格作为自动布线候选。依赖关系注释: {@org.Spring框架.豆子.工厂.注释.自动连线(必需=真)}

我在这里错过了什么?我需要在MongoStudentRepo.java中添加注释吗?

提前感谢。

共有3个答案

暴博远
2023-03-14

我很抱歉,我错过了我添加到主要的排除标准。java类使另一个概要文件工作@克丽莉丝谢谢你的指点。

这主要是有问题的。java文件

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, MongoRepositoriesAutoConfiguration.class})
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

修复了主.java文件

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, MongoRepositoriesAutoConfiguration.class})
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}
龚联
2023-03-14

您的接口类不需要注释,因为 Spring 数据存储库接口由 Spring Data 专门处理。

最有可能的情况是您的存储库类没有被Spring Data识别(您没有指定Spring Boot版本或包名称),在这种情况下,您可能需要@EnableMongoRepositories@Configuration类上(您的Spring Boot启动器类也是其中之一)。

孔驰
2023-03-14

堆栈跟踪显示Spring无法在您的MongoStudentDaoImpl.javaclass.From堆栈跟踪中自动装配一个beanMongoStustRepo

 Unsatisfied dependency expressed through field 'repo'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'MongoStudentRepo' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: 

Spring抛出此异常意味着蒙哥学生Repo.class的豆子没有被正确创建。

可能的解决方案:

  • 问题可能是因为spring没有使用spring中的默认实现为接口创建bean。这可能是因为您没有使用注释@EnableJpaRepositories来启用默认存储库bean的扫描和创建。有关更多信息,请阅读此处

但是,如果您使用基于xml的配置,则对于基于xml的设置,请使用:

<repositories base-package="com.acme.repository" />

<repositories base-package="com.acme.repository" repository-impl-postfix="MyPostfix" />

或者使用@Configuration注释:

@Configuration
@EnableJpaRepositories("com.acme.repositories")
class ApplicationConfiguration {

  @Bean
  EntityManagerFactory entityManagerFactory() {
    // …
  }
}

当您使用spring默认实现时,您只能为您的‘test’概要文件加载这个配置。

最佳阅读:https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.custom-实施

 类似资料: