如何避免Spring数据存储库的延迟初始化?

时间:2014-07-22 07:14:36

标签: spring spring-data lazy-initialization

我有一个bean后处理器(RepoRegistry),它接收spring-data存储库并将它们放在一个map中,以便按类型(repoRegistry.getRepositoryFor(MyEntity.class))使它们可用。似乎repo bean是懒惰创建的。作为一个工作,我现在必须手动自动装配所有存储库,以便它们由后处理器创建和处理。

是否有另一种方式来声明某些(或至少所有)spring数据存储库被声明为非延迟?我试图将@Lazy添加到存储库接口但没有成功。

2 个答案:

答案 0 :(得分:4)

您可能会在比Codd版本系列更早的Spring Data版本上看到这一点(例如Spring Data JPA 1.4.x)。默认情况下,Codd release train(以及Spring Data JPA 1.5)将此模型切换为eager init。在此之前,只有在存在注入目标时才会创建存储库bean。

我们通常建议使用我们已经在Spring Data Commons中提供的Repositories类型来获取BeanFactory中包含的所有存储库:

Repositories repositories = new Repositories(applicationContext);
repositories.getRepositoryFor(Person.class);

答案 1 :(得分:1)

将此方法添加到RepoRegistry

 @Autowired
 public void setReps( List<Repository> repos ) {...}

注意:我还没有使用过Spring Data。您需要将所有repos的公共接口类型用作List的类型参数。

然后,Spring将收集实现Repository的所有bean,并将它们作为列表传递给setter。