如何在没有组件扫描的情况下设置Spring Data JPA存储库

时间:2013-11-24 17:13:51

标签: spring jpa spring-data spring-data-jpa

出于性能原因,我正在从组件扫描切换到明确声明我的bean。所以基本上我想在扫描存储库时删除@EnableJpaRepositories

我的存储库是扩展JpaRepository的标准接口。我如何声明我的存储库?

3 个答案:

答案 0 :(得分:10)

您可以通过手动声明JpaRepositoryFactoryBean来创建单个存储库实例:

@Configuration
class Config {

  @Bean
  public JpaRepositoryFactoryBean userRepository() {
    JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean();
    factory.setRepositoryInterface(UserRepository.class);
    return factory;
  }
}

这将导致Spring调用getObject()从工厂获取存储库代理,并可能将其注入客户端。

但是,我认为 - 如果没有配置明显错误 - 扫描存储库的开销是可以忽略的,尤其是。与初始化EntityManagerFactory的时间相比较。

答案 1 :(得分:3)

我同意@Oliver。但是,Spring Data JPA的时间API显然已更改,并且在当前版本(2.2.3)中,该代码段应如下所示:

@Configuration
class Config {

  @Bean
  // assuming userId is String
  public JpaRepositoryFactoryBean<UserRepository, User, String> userRepository() {
    JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean(UserRepository.class);
    return factory;
  }
}

答案 2 :(得分:1)

如果您只想配置具体的存储库bean,可以直接使用工厂来创建它:

@Configuration
public class NotificationConfig {

    @Bean
    public NotificationRepository notificationRepository(EntityManager entityManager) {
        JpaRepositoryFactory jpaRepositoryFactory=new JpaRepositoryFactory(entityManager);
        return jpaRepositoryFactory.getRepository(NotificationRepository.class);
    }

}