存储库注释不适用于Spring数据JPA

时间:2018-03-18 09:42:12

标签: java spring spring-boot spring-data-jpa

我正在构建一个Spring-boot应用程序,我正在使用Spring数据jpa功能。

请在下面找到我的dao图层代码

package com.adv.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CustomerDao extends JpaRepository<Customer, String> {

}

我正在使用DaoProvider类,如下所示:

package com.adv.dao;

import java.io.Serializable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class DaoProvider implements Serializable {

private static final long serialVersionUID = 1L; 

@Autowired
private CustomerDao customerDao;

public CustomerDao getCustomerDao() {
    return customerDao;
}
}

我的spring boot主类定义如下:

@SpringBootApplication
@ComponentScan(basePackages="com.adv")
public class AdvMain extends SpringBootServletInitializer {

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(AdvMain.class);
   }

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

现在在运行时我遇到异常:

Field customerDao in com.adv.dao.DaoProvider required a bean of type 'com.adv.dao.CustomerDao' that could not be found.

我猜接口@Repository上的CustomerDao注释不起作用。

但是我无法弄清楚问题。任何人都可以找出问题吗?

3 个答案:

答案 0 :(得分:3)

尝试按{hangn1 Can't Autowire @Repository annotated interface in Spring Boot Ask

的建议在@EnableJpaRepositories("com.adv.dao")上添加AdvMain

答案 1 :(得分:0)

完全删除@ComponentScan注释。@SpringBootApplication注释已包含指定的here组件扫描。

答案 2 :(得分:0)

从dao界面中删除注释@Repository。该注释必须仅放在已实现的类上。

还要小心实现空构造函数而不是Customer类的all args构造函数。