首页 > 解决方案 > [] 中构造函数的参数 0 需要一个无法找到的 [] 类型的 bean

问题描述

错误:com.tw.api.service.impl.BookServiceImpl 中构造函数的参数 0 需要找不到类型为“com.tw.api.repository.BookRepository”的 bean。

例外:上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件中定义的名称为“bookController”的bean时出错[/Users/rashdul.ehasan/Projects/boot-camp/api/target/ classes/com/tw/api/controller/BookController.class]:通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:在文件 [/Users/rashdul.ehasan/Projects/boot-camp/api/target/classes/com/tw/api/ 中定义的名称为“bookServiceImpl”的 bean 创建错误service/impl/BookServiceImpl.class]:通过构造函数参数0表示的不满足依赖;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tw.api. repository.BookRepository' 可用:预计至少有 1 个符合自动装配候选资格的 bean。依赖注解

关于如何解决这个问题的任何想法?

我已经排除了默认的自动配置...

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class,
        MongoAutoConfiguration.class,
        MongoDataAutoConfiguration.class})
public class ApiApplication {

我已经为 mongo 编写了一个工厂 bean 类,但它似乎没有到达那里。

@Configuration
@ConditionalOnProperty(prefix = "spring", name = "db.dialect", havingValue = "mongo", matchIfMissing = true)
@EnableMongoRepositories(
        repositoryFactoryBeanClass = ApiMongoRepositoryFactoryBean.class,
        basePackages = "com.tw.api.repository")
public class ApiMongoRepositoryConfig {

    @Value("${spring.data.mongodb.uri}")
    private String uri;

    private static final Logger LOGGER = LoggerFactory.getLogger(ApiMongoRepositoryConfig.class);

    public ApiMongoRepositoryConfig() {
        LOGGER.info("Repository Configuration: " + ApiMongoRepositoryConfig.class);
    }

    @Bean
    public MongoClient mongoClient() {
        return new MongoClient(new MongoClientURI(uri));
    }
}

套餐:

BookController: package com.tw.api.controller;
BookService: package com.tw.api.service;
BookServiceImpl: package com.tw.api.service.impl;
BookRepository: package com.tw.api.repository;

ApiMongoRepository: package com.tw.api.repository.base;
ApiMongoRepositoryConfig: package com.tw.api.config;
ApiMongoRepositoryFactoryBean: package com.tw.api.helper;

ApiApplication: package com.tw.api;

这是代码库的链接, https://github.com/er310/boot-camp/tree/master/api

标签: springspring-bootdependency-injectionspring-data-jpa

解决方案


您将您的Book班级标记为 JPA 实体:

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "book")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Book extends AbstractEntity {

但是您只是使用 . 创建 Mong 存储库@EnableMongoRepositories

如果要使用带有 Spring Data Mongo 的 MongoDb 或带有 JPA + Spring Data JPA 的关系数据库,您需要下定决心。


推荐阅读