Java Spring Boot JPA-没有类型为的合格bean
我正在学习Spring,事情进展顺利,但突然遇到了这个问题,它找不到一个合格的bean。撞墙,即使在一个新的应用程序,我得到这个 如果你还需要更多,请告诉我,休息一下!我一定错过了一些非常简单的东西Java Spring Boot JPA-没有类型为的合格bean,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我正在学习Spring,事情进展顺利,但突然遇到了这个问题,它找不到一个合格的bean。撞墙,即使在一个新的应用程序,我得到这个 如果你还需要更多,请告诉我,休息一下!我一定错过了一些非常简单的东西 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.alco.repository.ContactRepository] fou
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [com.alco.repository.ContactRepository]
found for dependency [com.alco.repository.ContactRepository]:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
简单界面:
package com.alco.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.alco.entity.Contact;
public interface ContactRepository extends JpaRepository<Contact, String> {
}
package com.alco.repository;
导入org.springframework.data.jpa.repository.JpaRepository;
导入com.alco.entity.Contact;
公共接口ContactRepository扩展了JpaRepository{
}
您需要使用@repository
注释您的存储库,否则Spring将不会管理您的存储库类
不要使用更通用的@组件
,因为它可能会导致不同的行为,例如在异常管理中。作为一个例子,请看
摘录:
后处理器会自动查找所有异常转换器
(PersistenceExceptionTranslator接口的实现)和
通知所有标记有@Repository注释的bean,以便
发现的转换器可以截取并应用适当的
在抛出的异常上进行转换
另外,如前所述,将来您可能会遇到背部兼容性问题
作为替代方案,您可以使用@EnableJpaRepositories并指定Spring应该在哪里查找存储库 我唯一能看到的就是这个;请尝试使用存储库更改JpaRepository
import org.springframework.data.repository.Repository
public interface ContactRepository extends Repository<Contact, String> {
import org.springframework.data.repository.repository
公共接口ContactRepository扩展了存储库{
我认为您缺少启用JPA存储库的功能:
@ComponentScan(basePackageClasses = ...)
@EntityScan(basePackageClasses = ...)
@EnableAutoConfiguration
@EnableJpaRepositories(basePackageClasses = ...)
public class ... {
}
这将用于您的配置类。是作为应用程序的子包的
com.alco.repository
(带有@SpringBootApplication
的主类?如果不是,它不会在那里拾取它。可能会添加@EnableJpaRepositories(basePackages={“com.alco.repository”})
到您的主应用程序修复了该问题。不需要,任何示例(,)中都没有注释。生成的代码神奇地实现了这些接口,并且自动连接而不是接口,并使用@Repository
等进行了正确的注释。这对于Spring数据JPA存储库接口不是必需的,仅对于Spring Bean(类),用作存储库层的一部分。我认为要么使用该注释,要么将EnableJpaRepositories放入具有适当属性的位置。Spring告诉您它找不到接口,所以请帮助它。这不是必需的。只需要启用JPA存储库。
@ComponentScan(basePackageClasses = ...)
@EntityScan(basePackageClasses = ...)
@EnableAutoConfiguration
@EnableJpaRepositories(basePackageClasses = ...)
public class ... {
}