java spring中的注解@Repository如何工作?

时间:2019-05-08 03:07:40

标签: java spring

我有这样的代码:

存储库

@Repository
public interface EquipmentRepository extends JpaRepository<Equipment, Integer>{

Equipment findById(int id);
}

服务

@Service
public class EquipmentServiceImpl implements EquipmentService {

@Autowired
EquipmentRepository equipmentRepository;

@Override
public Equipment findById(int id) {
    return equipmentRepository.findById(id);
   }
}

我想知道为什么我可以调用“ interface EquipmentRepository”方法。 EquipmentRepository是一个接口,对吗?

1 个答案:

答案 0 :(得分:2)

Spring Repository负责将DAO导入到DI容器中,并且还将未经检查的异常生成到Spring DataAccessException中。 Spring Repository批注使用@Component批注进行元注释,以便将版本库类用于组件扫描。

  

实施传统Java EE模式的团队,例如“数据访问   对象”也可以将这种构造型应用于DAO类,   应该采取理解数据访问之间的区别   在进行对象和DDD样式的存储库之前。该注释是   一个通用的刻板印象,各个团队可能会缩小他们的   语义和适当使用。

     

这样注释的类有资格参加春季DataAccessException   与a结合使用时的翻译   PersistenceExceptionTranslationPostProcessor。带注释的类是   还阐明了它在整个应用程序体系结构中的作用   出于工具,方面等目的。

     

来源:JavaDoc

,但在您的情况下,您还要扩展Spring Data JPA的JpaRepository。 Spring Data自动提供常见CRUD操作的实现。 JpaRepository扩展了接口CrudRepository,该接口具有为所有基本Crud操作声明的方法。

public interface EquipmentRepository extends JpaRepository<Account, Long> { … }

定义此接口有两个目的:

  • 首先,通过扩展JpaRepository,我们得到了一堆通用CRUD 我们类型中的方法,可以保存,删除设备和 等等。
  • 第二,这将允许Spring Data JPA存储库基础结构 扫描该接口的类路径并为之创建一个Spring bean 它。

@EnableJpaRepositories扫描com.acme.repositories下的所有程序包以寻找扩展JpaRepository的接口,并为其创建一个Spring bean,并由SimpleJpaRepository的实现作为后盾(spring数据提供了默认值)。通过此类添加CRUD储存库)。

这就是为什么即使您没有定义方法,也可以通过此设置进行粗体操作。

引用:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories

相关问题