【问题标题】:How to hide spring data repository functions in service class?如何在服务类中隐藏spring数据存储库功能?
【发布时间】:2016-09-11 21:18:43
【问题描述】:
我正在使用 Spring Data JPA 存储库,我的要求是当我在服务类中调用存储库类方法时,它应该只显示自定义方法,如 addUser(X,Y) 而不是 save()。
- 我了解的很少,spring 存储库的实现是由 spring 框架在运行时提供的,所以我们不能提供自己的实现。 (这会产生开销)。
- JPARepository 中的所有方法都是公开的,所以当我们实现这个接口时,所有方法都将是可见的。
- 我正在考虑同时使用 DAO 和存储库。 DAO 将提供自定义函数签名,存储库将实现 DAO 接口。
任何黑客?
【问题讨论】:
标签:
spring
spring-data
spring-data-jpa
【解决方案1】:
如果您不想要来自 JpaRepository 或 CrudRepository 的方法,请不要扩展它们,而只需使用 Repository。拥有像
这样的存储库接口是非常好的
MyVeryLimitedRepository extends Repository<User, Long> {
User findByName(String name);
}
当然,像addUser(X,Y) 这样的方法需要自定义实现。
【解决方案2】:
在这种情况下,你可以很好地使用 DAO 模式。
通过在服务类中实现 DAO 模式
您在 Service 和 Repository 之间创建一个包装器。
您可以自定义编码您的 DAO 层以仅向服务层公开自定义方法