Spring Data直接自动装配存储库接口

时间:2015-11-30 13:33:55

标签: java spring-data-jpa

我是Spring Data的新手,我想知道以这种方式直接自动装载存储库是否正确(假设不再需要更多方法),因为Spring 4可以解决通用自动装配:

@Autowired
CrudRepository<User,Long> repo;

有多个bean实现了这个接口(SimpleJPARepository,QueryDslJpaRepository),所以Spring无法解决自动装配不是吗?

但如果你这样做的话:

public interface MyRepo extends CrudRepository<User,Long> () {
}

实现什么bean autowire?

感谢。

1 个答案:

答案 0 :(得分:3)

我不知道您是否可以直接自动装配CrudRepository<User,Long> repo;,我想这可行。试试吧。

通常通过定义类似

的界面来声明您希望拥有User的存储库
public interface MyRepo extends CrudRepository<User,Long> () {
}

然后你只需自动装配它。 (我还建议你将其命名为UserRespository,因为这就是它的工作原理)

@Autowired
MyRepo repo;

魔术是Spring Data然后为您实现接口。您可以自动获得该实现,并且您的代码保持清洁您使用的数据库的实现细节。

  

有多个bean实现了这个接口(SimpleJPARepository,QueryDslJpaRepository),所以Spring无法解决自动装配不是吗?

它也必须在常规情况下这样做。有规则&amp;配置某个地方将决定选择哪个实现,以防它有超过1个候选接口。

如果是SimpleJPARepository vs QueryDslJpaRepository,它可能归结为您是否使用了额外的功能。后者的文件是

  

QueryDsl SimpleJpaRepository的特定扩展,它为QueryDslPredicateExecutor添加了实现。

如果您不想要继承QueryDslPredicateExecutor的类型,则不需要将魔术实现基于该类。