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

时间:2018-02-28 07:34:05

标签: java spring spring-boot

我正在使用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 {

}

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

至于你的问题:

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我也遇到了同样的问题。我错过的是 spring-boot-starter-jpa 依赖项。当我在 pom.xml 文件中添加这个依赖项时它起作用了。

答案 4 :(得分:0)

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

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

建议: 完全显示 ArticleRepository 代码。

答案 5 :(得分:0)

界面不需要任何注释(@repository都不需要@Service)。

如果是DAO文件,则在实现相应接口的类中添加@Repository批注。

并且,如果它是一项服务,则将@Service批注添加到实现相应接口的类中。