我的自定义存储库实现中的CrudRepository
我试图获取对自定义实现()中UserRepository
扩展的存储库接口()的引用,以便获得对Spring
JPA提供的所有方法的访问。CrudRepository``UserRepositoryExtensionImpl
Crud扩展名:
@Repositorypublic interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
扩展接口:
@Repositorypublic interface UserRepositoryExtension <T> {
public T put(T entity);
}
定制实施:
public class UserRepositoryExtensionImpl implements UserRepositoryExtension<User> { UserRepository userRepository;
@Autowired
public UserRepositoryExtensionImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public User put(User user) {
System.out.println(user + "was put");
// ...put logic here
return null;
}...
}
但是,UserRepository
由于存在循环依赖关系(鉴于UserRepository
扩展了my所实现的接口UserRepositoryImpl
),因此我无法注入。我收到以下错误:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
一种可能的,但达不到理想的解决办法是注入和EntityManager
成UserRepositoryImp
,但在这种情况下,我没有获得任何所提供的春天JPA的方法CrudRepository
,或任何其他方法,我可能在UserRepository创造。
关于如何解决这个问题的任何建议?
任何帮助将不胜感激。
编辑:正如@shelley的答案中所述,我能够通过进行3个更改来解决此问题:
@Repository
从中删除UserRepositoryExtensionImpl
- 重命名
UserRepositoryExtensionImpl
为UserRepositoryImpl
。显然,这使Spring意识到了实现的存在。见spring文件 - 删除我的构造函数并将其
@Autowired
移到该userRepository
字段
成功!
回答:
为了使它起作用,需要更改一些小事项:
@Repository
从自定义存储库界面(UserRepositoryExtension
)中删除注释。自定义存储库实现实际上应命名为“
<StandardRepository>Impl
”,而不是“<CustomRepository>Impl
”。在您的代码示例中,应使用UserRepositoryImpl
而不是UserRepositoryExtensionImpl
。
以上是 我的自定义存储库实现中的CrudRepository 的全部内容, 来源链接: utcz.com/qa/405554.html