我正在使用一个简单的Spring启动应用程序,我想使用Hibernate连接我的数据库。我无法将我的Repository类注入我的Controller类。请帮忙。但是,当我删除导致代码的问题时,我的应用程序能够扫描每个组件,它工作正常。我已经通过Eclipse创建了我的代码。
我的入门课程
package spring.starter;
@SpringBootApplication
@ComponentScan(basePackages = "spring")
public class Starter {
public static void main(String args[]) {
ApplicationContext ctx = SpringApplication.run(Starter.class, args);
}
}
我的控制器类
package spring.controller;
@RestController
@RequestMapping("/app")
public class AdminController {
/*@Autowired
private AdminService service;*/
@Autowired
@Qualifier("adminRepository")
private AdminRepository adminRepository;
@GetMapping("/admin")
public List<Admin> getAllAdmin() {
return adminRepository.findAll();
}
}
我的存储库类:对于这个类,我尝试删除这两个注释,但也可以工作。
package spring.repository;
@Repository
@Qualifier("adminRepository")
public interface AdminRepository extends JpaRepository<Admin, Integer>{
}
异常追踪
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [spring.repository.AdminRepository] found for dependency [spring.repository.AdminRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=adminRepository)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
... 19 common frames omitted
答案 0 :(得分:1)
ComponentScan
注释未检测到Spring Data JPA存储库。对于他们,你必须提供注释
@EnableJpaRepositories(basePackages = "spring")
或您更改SpringBootApplication
注释如下:
@SpringBootAnnotation(scanBasePackages = "spring")
这将涵盖ComponentScan
以及EnableJpaRepositories
的自定义程序包配置。
完成其中一项更改后,您还可以从存储库中删除@Repository
。该注释不适用于Spring Data JPA存储库接口,对它们没有影响。
答案 1 :(得分:1)
我发现了问题,我的入门类在spring.starter包中,所有我要做的就是将这个类移到包结构中的一个级别,例如:
package spring;
@SpringBootApplication
@ComponentScan(basePackages = "spring")
public class Starter {
public static void main(String args[]) {
ApplicationContext ctx = SpringApplication.run(Starter.class, args);
}
}
然后它奏效了。但我在这里有一个疑问。那么@ComponentScan的好处是什么?