我有这样的代码:
存储库
@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是一个接口,对吗?
答案 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
我们类型中的方法,可以保存,删除设备和
等等。 @EnableJpaRepositories
扫描com.acme.repositories
下的所有程序包以寻找扩展JpaRepository
的接口,并为其创建一个Spring bean,并由SimpleJpaRepository
的实现作为后盾(spring数据提供了默认值)。通过此类添加CRUD储存库)。
这就是为什么即使您没有定义方法,也可以通过此设置进行粗体操作。
引用:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories