启动我的应用程序时遇到问题。有人可以帮我解决这个问题吗?
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)
从您之前的评论来看,您似乎想保留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)
使用构造函数实例化
当您通过构造函数方法创建 bean 时,所有普通类都可以由 Spring 使用并与 Spring 兼容。也就是说,正在开发的类不需要实现任何特定的接口或以特定的方式编码。只需指定 Bean 类就足够了。但是,根据您对该特定 bean 使用的 IoC 类型,您可能需要一个默认(空)构造函数。
Spring IoC 容器几乎可以管理您希望它管理的任何类;它不仅限于管理真正的 JavaBean。大多数 Spring 用户更喜欢仅具有默认(无参数)构造函数以及根据容器中的属性建模的适当 setter 和 getter 的实际 JavaBean。您还可以在容器中包含更多奇特的非 bean 样式的类。例如,如果您需要使用完全不符合 JavaBean 规范的遗留连接池,Spring 也可以管理它。
归档时间: |
|
查看次数: |
36388 次 |
最近记录: |