我有这样的代码:
存储库
@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 Equipment Repository"的方法。设备重新设备是接口,对吗?
Spring存储库负责将DAO的导入到DI容器中,并且还将未检查的例外引入Spring DataAccessException
。弹簧存储库注释是用@Component注释元注释的,以便将存储库类用于组件扫描。
实施传统Java EE模式的团队,例如"数据访问 对象"也可以将这种刻板印象应用于DAO课程,尽管护理 应该采取以了解数据访问之间的区别 在此之前,对象和DDD风格的存储库。该注释是 通用的刻板印象和个人团队可能会缩小他们的范围 语义和适当的使用。
这样注释的课程符合春季
DataAccessException
的资格 与A结合使用时翻译PersistenceExceptionTranslationPostProcessor
。带注释的类是 还阐明了其在整体应用架构中的作用 出于工具,方面等的目的来源:Javadoc
但是,在您的情况下,您还将扩展Spring Data JPA的JpaRepository
。春季数据会自动提供常见的CRUD操作的实现。JpaRepository
扩展了接口CrudRepository
,该接口具有所有基本CRUD操作的方法。
public interface EquipmentRepository extends JpaRepository<Account, Long> { … }
定义此接口有两个目的:
- 首先,通过扩展
JpaRepository
,我们得到了一堆通用的CRUD进入我们类型的方法,可以节省设备,删除它们并等等。 - 第二,这将允许弹簧数据JPA存储库基础结构扫描该接口的类路径并为它。
@EnableJpaRepositories
扫描com.acme.repositories
以下的所有软件包,以扩展JpaRepository
的接口,并为其创建一个由SimpleJpaRepository
实现的弹簧bean(Spring Data提供了通过此类的CRUD存储库的默认信息(。
这就是为什么即使您尚未定义方法,也可以通过此设置进行CRUD操作。
在