如何使用Spring Boot从不同的包中自动装配存储库接口?

时间:2014-05-07 09:39:36

标签: spring spring-data spring-boot

我是Spring Boot的新手,希望从Rest Controller中的其他软件包中自动装配存储库。似乎当我将接口和实现放在不同的包中时,实际控制器的自动装置似乎失败了。

  

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到[com.acme.repository.RawDataRepository]类型的限定bean用于依赖:..

控制器:

package com.acme.controller;
import com.acme.repository.RawDataRepository;
// imports removed!

@RestController
@EnableAutoConfiguration
@ComponentScan("com.acme")
public class DataCollectionController {

    @Autowired
    private RawDataRepository repository;

    // code removed!
}

我曾尝试使用@ComponentScan注释,但这没有提供任何解决方案。 知道我错过了什么吗?每当我将接口放入控制器所在的包中时,一切顺利。

enter image description here

3 个答案:

答案 0 :(得分:8)

如果您在另一个软件包中有Spring数据@Repositories,则必须明确@EnableJpaRepositories(或用您自己的风格替换" Jpa")。 Boot从包含@EnableAutoConfiguration的包中获取默认值,因此也可以只移动该类。

答案 1 :(得分:0)

Spring Boot提供启用存储库的注释。 因此,只要有人使用任何存储库(它可以是JPARepository,CassandraReposotory),就应该在Application Class本身中启用它。

示例:

@EnableCassandraRepositories("package name")
@EnableJpaRepositories("package name")

在提供上述注释之后,容器也负责为存储库注入bean。

答案 2 :(得分:0)

您必须使用以下两个注释

@EnableJpaRepositories(basePackages = "package-name")
@EntityScan(basePackages = "package-name")

如果主类位于某个不同的包中,EnableJpaRepositories将启用存储库。 您还需要使用EntityScan指向您拥有实体bean的包,否则它将失败,而Bean不是托管类型'错误。