..... Spring Boot中构造函数的参数0

新手上路,请多包涵

启动我的应用程序时遇到问题。有人可以帮我解决这个问题吗?

 Parameter 0 of constructor in com.journaldev.elasticsearch.service.BookServiceImpl required a bean of type 'com.journaldev.elasticsearch.dao.search.BookRepositorySearch' that could not be found.
Action:
Consider defining a bean of type 'com.journaldev.elasticsearch.dao.search.BookRepositorySearch' in your configuration.

通用存储库

public interface GenericRepository<T, K> {
  Map<String, Object> get(final K id);
}

通用存储库实现

public class GenericRepositoryImpl<T, K extends Serializable> implements GenericRepository<T, K> {

  private RestHighLevelClient restHighLevelClient;

  private ObjectMapper objectMapper;

  public GenericRepositoryImpl(ObjectMapper objectMapper, RestHighLevelClient restHighLevelClient) {
    this.objectMapper = objectMapper;
    this.restHighLevelClient = restHighLevelClient;
  }

  @Override
  public Map<String, Object> get(K id) {
    return null;
  }
}

书库搜索

@Component
public interface BookRepositorySearch extends GenericRepository<Book, Long> {}

图书服务

public interface BookService {
  Map<String, Object> get(final Long id);
}

BookServiceImpl

 @Service
public class BookServiceImpl implements BookService {

  private final BookRepositorySearch bookRepositorySearch;

  public BookServiceImpl(BookRepositorySearch bookRepositorySearch) {
    this.bookRepositorySearch = bookRepositorySearch;
  }
  @Override
  public Map<String, Object> get(Long id) {
    return null;
  }
}

原文由 Aymen Kanzari 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

从您之前的评论来看,您似乎想保留 BookRepositorySearch 作为接口。如果是这种情况,您需要创建该接口的具体实例并将 @Component 放在上面。

您不需要 @Component 在您的接口声明中,您不能在接口中扩展类。

 public interface BookRepositorySearch {}

创建一个实现接口并扩展 extends GenericRepository<Book, Long> 的具体类型,你想自动装配并将 @Component 放在上面:

 @Component
public class BookRepositorySearchImpl
    implements BookRepositorySearch
    extends GenericRepository<Book, Long>
{}

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-class-ctor

使用构造函数实例化

当您通过构造函数方法创建一个 bean 时,所有普通类都可由 Spring 使用并与 Spring 兼容。也就是说,正在开发的类不需要实现任何特定接口或以特定方式进行编码。只需指定 bean 类就足够了。但是,根据您为特定 bean 使用的 IoC 类型,您可能需要一个默认(空)构造函数。

Spring IoC 容器几乎可以管理您希望它管理的任何类;它不仅限于管理真正的 JavaBeans。大多数 Spring 用户更喜欢只有默认(无参数)构造函数和适当的 setter 和 getter 的实际 JavaBeans,这些 setter 和 getter 是根据容器中的属性建模的。您还可以在容器中包含更多异国情调的非 bean 类。例如,如果您需要使用一个完全不符合 JavaBean 规范的遗留连接池,Spring 也可以管理它。

原文由 Always Learning 发布,翻译遵循 CC BY-SA 4.0 许可协议

我用这个配置解决了它。在您的 配置文件 中查找 @EnableAutoConfiguration

 @Configuration

@EnableJpaRepositories(basePackages = "com.akog02.repostories")

@EntityScan(basePackages = "com.akog02.domain")

@EnableTransactionManagement

@EnableAutoConfiguration

public class WebConfiguration {

}

原文由 Mr Kyaing 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏