Crud存储库在我的自定义存储库实现中
我正在尝试获取对我的存储库接口()的引用,该接口在我的自定义实现()中扩展,以便访问Spring JPA提供的所有方法。UserRepository
CrudRepository
UserRepositoryExtensionImpl
Crud Extension:
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
扩展接口:
@Repository
public 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;
}...
}
但是,我无法注入,因为存在循环依赖关系(鉴于它扩展了由my实现的接口)。我收到以下错误:UserRepository
UserRepository
UserRepositoryImpl
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
一个可能的,但不太理想的解决方案是注入和进入,但在这种情况下,我无法访问 提供的任何Spring JPA方法,或者我可能在UserRepository中创建的任何其他方法。EntityManager
UserRepositoryImp
CrudRepository
关于如何解决这个问题的任何建议?
任何帮助将不胜感激。
编辑:正如@shelley的答案中提到的,我能够通过进行3次更改来解决此问题:
- 删除从
@Repository
UserRepositoryExtensionImpl
- 重命名为 。显然,这让Spring意识到了实现的存在。见春季文档
UserRepositoryExtensionImpl
UserRepositoryImpl
- 删除我的构造函数并将 移动到字段
@Autowired
userRepository
成功!