我在启动应用程序时遇到问题。有人可以帮助我解决这个问题吗?
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.
字符串
GenericRepository
public interface GenericRepository<T, K> {
Map<String, Object> get(final K id);
}
型
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;
}
}
型
BookRepositorySearch
@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;
}
}
型
6条答案
按热度按时间piok6c0g1#
从你之前的评论来看,似乎你想保留
BookRepositorySearch
作为一个接口。如果是这样的话,你需要创建一个该接口的具体示例,并将@Component
放在上面。在接口声明中不需要
@Component
,也不能在接口中扩展类。字符串
创建一个实现接口的具体类型,并扩展您想要自动连接的extends
GenericRepository<Book, Long>
,并将@Component
放在上面:型
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-class-ctor
使用构造函数示例化
当您通过构造函数方法创建bean时,所有普通的类都可以被Spring使用并与Spring兼容。也就是说,正在开发的类不需要实现任何特定的接口或以特定的方式编码。只需指定bean class就足够了。然而,根据您为特定bean使用的IoC类型,您可能需要一个默认(空)构造函数。
Spring IoC容器几乎可以管理任何你想让它管理的类;它不仅限于管理真正的JavaBean。大多数Spring用户更喜欢实际的JavaBean,(无参数)构造函数和适当的setter和getter,它们是根据容器中的属性建模的。你也可以在你的容器中有更多的非bean风格的类。例如,你需要使用一个绝对不符合JavaBean规范的遗留连接池,Spring也可以管理它。
i5desfxk2#
我用这个配置解决了,在你的 * 配置文件 * 中查找
@EnableAutoConfiguration
。字符串
zlhcx6iw3#
首先,你需要“告诉”spring传递什么作为参数。最简单的选项是@Berger在评论中提到的那个。如果出于某种原因,这对你来说不是一个好方法(例如。BookRepositorySearch不是spring托管的bean),你可以用更多的逻辑来创建一个java配置文件:
字符串
编辑:
显然Spring不再需要@Autowired了(感谢@Mark Rotteveel)。所以问题是spring没有你的类的示例。原因是(我认为)你使用了类参数而不是接口。如果你只是创建一个BookRepositorySearch实现的标记接口,并将其用作参数而不是实际的实现,我希望它能工作。另一个解决方案是我上面已经写过的,但是对于BookRepositorySearch类。
型
这样Spring将拥有它心爱的示例;)
m1m5dgzv4#
如何将类作为接口继承?
字符串
使用类更改此接口,然后重试。
型
8ljdwjyq5#
您必须在Prin中添加@EnableJpaRepositories(“org.tennis.Tennnis.dao”)
f0ofjuux6#
我浪费了一整天的时间,最后,我发现我在我的pom.xml中使用了下面的依赖项。
字符串
关于下面的依赖关系,我的代码工作
型