【问题标题】:Spring-Data: What is the difference between Autowiring a @Service and Autowiring the Repository DirectlySpring-Data:自动装配@Service 和直接自动装配存储库有什么区别
【发布时间】:2013-11-20 19:13:49
【问题描述】:

我正在使用 Spring-Data-JPA,并且在我的持久层中使用两个存储库来访问数据库,然后有时使用 1) 包含存储库的服务类,然后自动装配服务 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);
}
}

【问题讨论】:

    标签: jpa spring-data-jpa springsource


    【解决方案1】:

    无论哪种方式,您都在使用同一种具体的 Repository 对象,该对象是在容器加载时由 Spring 创建的。而且,如果您不对范围进行任何操作,那么您正在使用对完全相同对象的引用。

    这些方法的工作方式是否相同?如果服务只对委托存储库进行传递调用,那么它不会导致任何不同的最终行为。如果这种传递行为是服务所做的全部,那么它就没有存在的内在原因。

    Spring Data JPA 提供了标准方法来将自定义行为添加到存储库,或者将存储库的行为限制为一组较小的方法。 Spring Data JPA 文档(虽然简短)提供了这些技术的演示。

    最终结果是相同的,但通常您会发现直接使用存储库更简洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2019-02-28
      相关资源
      最近更新 更多