为了提高性能,我将从组件扫描切换到显式声明我的bean。所以基本上我想要删除
我的存储库是标准接口,扩展了
@EnableJpaRepositories
,因为它会扫描存储库。我的存储库是标准接口,扩展了
JpaRepository
。我该如何声明我的存储库?@EnableJpaRepositories
,因为它会扫描存储库。JpaRepository
。我该如何声明我的存储库?您可以通过手动声明 JpaRepositoryFactoryBean
来创建单独的存储库实例:
@Configuration
class Config {
@Bean
public JpaRepositoryFactoryBean userRepository() {
JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean();
factory.setRepositoryInterface(UserRepository.class);
return factory;
}
}
这将导致Spring调用getObject()
从工厂中获取存储库代理,并可能将其注入客户端。
然而,我认为,除非明显配置错误,否则扫描存储库的开销可以忽略不计,特别是与初始化EntityManagerFactory
所需的时间相比。
我同意@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;
}
}
@Configuration
public class NotificationConfig {
@Bean
public NotificationRepository notificationRepository(EntityManager entityManager) {
JpaRepositoryFactory jpaRepositoryFactory=new JpaRepositoryFactory(entityManager);
return jpaRepositoryFactory.getRepository(NotificationRepository.class);
}
}