我正在使用Spring-Data-JPA,并且在我的持久层中使用两个存储库来访问数据库,然后有时使用 1)其中包含存储库的Service类,然后自动装配该服务 2)直接自动装配存储库
这两种方法的行为方式是否相同?直接使用存储库与在服务中使用存储库之间有什么区别?
存储库:
package com.me.repository;
import com.me.myentities.MyEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
}
服务:
package com.me.service;
import com.me.entities.*;
import org.springframework.stereotype.Service;
import com.me.repository.*;
import javax.annotation.Resource;
@Service
public class MyService {
@Resource
private MyEntityRepository myEntityRepository ;
public void update(MyEntity myEntity)
{
myEntityRepository.save(myEntity);
}
}
答案 0 :(得分:1)
无论哪种方式,您都在使用相同类型的具体Repository对象,该对象是在容器加载时由Spring创建的。如果你没有对范围界定做任何事情,那么你正在使用对完全相同的对象的引用。
这些方法的工作方式是否相同?如果服务除了对委托存储库进行传递调用之外什么都不做,那么它不会导致任何不同的结束行为。如果这种传递行为是服务所做的全部,那么它就没有现成的固有原因。
Spring Data JPA提供了向存储库添加自定义行为的标准方法,或者将存储库的行为限制为较小的方法集。 Spring Data JPA文档(简要介绍)提供了这些技术的演示。
最终结果是一样的,但通常你会发现直接使用Repository更简洁。