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

Mar*_*ijk 9 spring jpa spring-data spring-data-jpa

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

我的存储库是扩展的标准接口JpaRepository.我如何申报我的存储库?

Oli*_*ohm 11

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

@Configuration
class Config {

  @Bean
  public JpaRepositoryFactoryBean userRepository() {
    JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean();
    factory.setRepositoryInterface(UserRepository.class);
    return factory;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

我同意@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;
  }
}
Run Code Online (Sandbox Code Playgroud)