2017-10-18 122 views
0

我写了一个样本春天启动的应用程序,它是无法与运行的消息确定的Spring bean不@Repository注解

` 说明: 场customerRepository在com.hibernatetutorial.service.CustomerServiceImpl所需的豆键入'com.hibernatetutorial.repository.CustomerRepository'找不到。

操作: 考虑定义类型“com.hibernatetutorial.repository.CustomerRepository”的豆你configuration.`

我有CustomerRepository类@Repository注解,它的包装是在有基础包扫描。

下面是配置

@SpringBootApplication 
@ComponentScan(basePackages="com.hibernatetutorial") 
public class HibernateTutorialApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(HibernateTutorialApplication.class, args); 

    } 

} 

@Repository 
@Transactional 
public interface CustomerRepository extends JpaRepository<Customer, UUID>{ 

} 

@Service 
@Transactional 
public class CustomerServiceImpl implements CustomerService { 

    @Autowired 
    private CustomerRepository customerRepository; 

    public Customer createCustomer(Customer customer) { 
     return customerRepository.save(customer); 
    } 

} 

客户实体标注有@Entity。任何建议,如果我错过了什么

+0

您是否有手动指定@ComponentScan的原因?这些课程是不同的包装? – dillius

+0

是的,他们是在他们各自的软件包,如服务,存储库,模型等..我已经删除componentscan并用SpringBootApplication(scanBasePackages = {“com.hibernatetutorial”})取代它,因为SpringBootApplication也会照顾组件扫描,但仍然是错误是否 – arjun

+0

当您尝试使用@EnableJpaRepositories时,是否指定了与组件扫描一样的准确软件包? – dillius

回答

1

要使用JpaRepository你需要添加以下到您的应用程序之一:

@EnableAutoConfiguration春季引导弄明白本身或

@EnableJpaRespositories(basePackageScan="com.example")自己指定它

For more information

+0

我试了两次,但错误没有消失。按照文档“SpringBootApplication注释相当于使用Configuration,EnableAutoConfiguration和ComponentScan及其默认属性:”不确定是否还需要添加。 – arjun

+0

我的错误,我不得不这样做,因为我在最近的Spring应用程序中在SpringBootApplication本身之外指定了一个单独的配置。 – dillius

0

请确认您CustomerRepository和CustomerServiceImpl Java文件是相同的packege com.hibernatetutorial下。

+0

它们不在同一个包中,但这就是为什么我将基本包扫描为(scanBasePackages = {“com.hibernatetutorial”})。这里com.hibernatetutorial是整个软件包的一部分,假设它将扫描所有的软件包并启动com.hibernatetutorial – arjun

+0

@arjun Okkay.If这两个文件都在基本软件包com.hibernatetutorial下面。然后它应该与ComponentScan一起工​​作(“com.hibernatetutorial 。*“)标识。 – GaneshSreeju

+0

我意识到我必须添加*,但仍然无法正常工作,我试过(“com.hibernatetutorial。*”)。当我将EnableJpaRepository与基本包一起添加为(“com.hibernatetutorial。*”)时,它正在工作。 – arjun