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

Aym*_*ari 7 java spring-boot

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

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.
Run Code Online (Sandbox Code Playgroud)

通用存储库

public interface GenericRepository<T, K> {
  Map<String, Object> get(final K id);
}
Run Code Online (Sandbox Code Playgroud)

GenericRepositoryImpl

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

书库搜索

@Component
public interface BookRepositorySearch extends GenericRepository<Book, Long> {}
Run Code Online (Sandbox Code Playgroud)

图书服务

public interface BookService {
  Map<String, Object> get(final Long id);    
}
Run Code Online (Sandbox Code Playgroud)

图书服务实现

@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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Alw*_*ing 7

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

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

public interface BookRepositorySearch {}
Run Code Online (Sandbox Code Playgroud)

创建一个具体类型来实现接口并扩展GenericRepository<Book, Long>您想要自动装配并放置的扩展@Component

@Component
public class BookRepositorySearchImpl 
    implements BookRepositorySearch 
    extends GenericRepository<Book, Long>  
{}
Run Code Online (Sandbox Code Playgroud)

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

使用构造函数实例化

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

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