出于性能原因,我正在从组件扫描切换到明确声明我的bean。所以基本上我想在扫描存储库时删除@EnableJpaRepositories
。
我的存储库是扩展JpaRepository
的标准接口。我如何声明我的存储库?
答案 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);
}
}