无法在Spring启动应用程序中自动连接界面

问题描述 投票:0回答:4

我正在使用spring boot开发REST API。以下是我的包结构当我尝试启动我的应用程序时获取以下异常

***************************
APPLICATION FAILED TO START
***************************

Description:

Field articleRepository in com.abc.service.ArticleService required a bean of type 'com.abc.dao.ArticleRepository' that could not be found.


Action:

Consider defining a bean of type 'com.abc.dao.ArticleRepository' in your configuration.

以下是我的项目结构 -

com.abc
com.abc.bean
    -Article.java
com.abc.controller
    -ArticleController.java
com.abc.dao
    -ArticleRepository.java (Interface)
com.abc.service
    -ArticleService.java
com.abc.web
    -AbcApplication.java (main Springboot class)

在AbcApplication.java中,因为它不在根包中,所以我有以下注释

@SpringBootApplication
@ComponentScan(basePackages="com.abc.*")

我尝试了几种方法 -

  • 我将AbcApplication.java移动到root包com.abc但没有成功
  • 而不是接口(ArticleRepository.java)我把它变成了一个类,它正在工作
  • 我将它保留为接口,但将注释从@Repository更改为@Service / Component仍然没有成功。

如果我将它改为类而不是接口,我很困惑它是如何工作的。

@Repository
public interface ArticleRepository {

}
java spring spring-boot
4个回答
3
投票

你没有ArticleRepository的任何bean。如果您将使用Spring Data Jpa,则必须扩展一种类型的存储库:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories

如果您将使用自己的存储库,则必须实现它。


2
投票

如果您正在使用任何RDBMS并且如果ArticleRepository存储库负责与您的数据库交互,那么您需要在CrudRepository中扩展JpaRepositoryArticleRepository,然后只有Spring才能创建ArticleRepository的bean,并且您将能够自动装配您的存储库。

如果你没有扩展任何CrudRepositoryJpaRepository,那么在bean创建时,ArticleRepository只是普通的java接口,并且普通的接口无法实例化。

至于你的问题:

Instead of interface(ArticleRepository.java) I made it a class, it is working

因为当你将它声明为一个类时,Spring会实例化一个具体的类,因此实际的对象将在bean创建时创建,一切都将按原样运行。


1
投票

理想情况下,您应该有一个实现接口ArticleRepository的类。使用@Repository注释该类,spring将负责布线。


0
投票

MyBatis为您提供了两个样本,可以通过spring boot来访问您的数据库。@ Component或@Mapper。

示例链接:mybatis-spring-boot-sample-xml

建议:完全显示您的ArticleRepository代码。

© www.soinside.com 2019 - 2024. All rights reserved.