Spring-Data:自动装配@Service和直接自动装配存储库之间有什么区别

时间:2013-11-20 19:13:49

标签: jpa spring-data-jpa springsource

我正在使用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);
}
}

1 个答案:

答案 0 :(得分:1)

无论哪种方式,您都在使用相同类型的具体Repository对象,该对象是在容器加载时由Spring创建的。如果你没有对范围界定做任何事情,那么你正在使用对完全相同的对象的引用。

这些方法的工作方式是否相同?如果服务除了对委托存储库进行传递调用之外什么都不做,那么它不会导致任何不同的结束行为。如果这种传递行为是服务所做的全部,那么它就没有现成的固有原因。

Spring Data JPA提供了向存储库添加自定义行为的标准方法,或者将存储库的行为限制为较小的方法集。 Spring Data JPA文档(简要介绍)提供了这些技术的演示。

最终结果是一样的,但通常你会发现直接使用Repository更简洁。