我正在构建一个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
注释不起作用。
但是我无法弄清楚问题。任何人都可以找出问题吗?
答案 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构造函数。