我是Spring Data的新手,我想知道以这种方式直接自动装载存储库是否正确(假设不再需要更多方法),因为Spring 4可以解决通用自动装配:
@Autowired
CrudRepository<User,Long> repo;
有多个bean实现了这个接口(SimpleJPARepository,QueryDslJpaRepository),所以Spring无法解决自动装配不是吗?
但如果你这样做的话:
public interface MyRepo extends CrudRepository<User,Long> () {
}
实现什么bean autowire?
感谢。
答案 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
的类型,则不需要将魔术实现基于该类。