我正在学习Spring,事情进展顺利,但突然遇到了无法找到合格bean的问题。即使在一个新的应用程序中,我也会碰壁。
如果您需要更多,请告诉我,请休息一下!我必须错过一些非常简单的事情。
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.example.entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Contact implements Serializable {
private static final long serialVersionUID = -1340978779095092824L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String id;
private String firstName;
private String lastName;
private String address;
private String phoneNumber;
private String email;
}
简单的界面:
package com.alco.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.alco.entity.Contact;
public interface ContactRepository extends JpaRepository<Contact, String> {
}
答案 0 :(得分:6)
我认为您缺少启用JPA存储库:
@ComponentScan(basePackageClasses = ...)
@EntityScan(basePackageClasses = ...)
@EnableAutoConfiguration
@EnableJpaRepositories(basePackageClasses = ...)
public class ... {
}
这适用于您的配置类。
答案 1 :(得分:0)
我唯一能看到的就是这个;请尝试使用存储库更改JpaRepository
import org.springframework.data.repository.Repository
public interface ContactRepository extends Repository<Contact, String> {
答案 2 :(得分:-1)
您需要使用@Repository
注释您的存储库,否则Spring将无法管理您的存储库类。
请勿使用更通用的@Component
,因为它可能导致不同的行为,例如在异常管理中。例如,请查看this parte of the Spring Documentation。
摘录:
后处理器会自动查找所有异常转换器 (PersistenceExceptionTranslator接口的实现)和 建议所有标有@Repository注释的bean,以便 发现翻译人员可以拦截并应用适当的 关于抛出异常的翻译。
另外,正如前面提到的here,将来可能会出现后向兼容性问题。
作为替代方案,您可以使用@EnableJpaRepositories并指定Spring应该在哪里查找存储库。