为什么 JpaRepository 上需要 @Repository 注释?

Lui*_*dez 1 jpa spring-boot

我有以下存储库:

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

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
    Employee findByName(String name);
}

Run Code Online (Sandbox Code Playgroud)

假设Employee是您常用的带有 id、name 和 surname 的实体类。

我将这个类连接到我的类EmployeeService并像这样使用它:

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository repository;

    public Employee saveEmployee(Employee employee) {
        return repository.save(employee);
    }
}
Run Code Online (Sandbox Code Playgroud)

@Repository将注释添加到存储库会有什么影响吗?

例子:

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

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
    Employee findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

cri*_*zis 6

@RepositorySpring Data 存储库不需要该注释。Spring Boot 根据存储库 bean 扩展接口的事实来检测它们Repository

事实上,如果您希望创建@NoRepositoryBean存储库 bean,则需要使用以下命令抑制此行为。

注释@Repository@Component. 如果您在没有 Spring Data 帮助的情况下实现存储库,您可以对它们进行注释,将@Repository它们声明为 bean ,并暗示它们在应用程序中的角色。

  • 事实上,通过向此类接口添加`@Repository`注释,您可以在日志中创建警告,这些警告由bean扫描器写入,因为它看到了该注释,但它不在正确的类上,该类可以实例化为bean(这是几天前在一个问题中提出的)。 (4认同)