我的自定义存储库实现中的CrudRepository

我试图获取对自定义实现()中UserRepository扩展的存储库接口()的引用,以便获得对Spring

JPA提供的所有方法的访问。CrudRepository``UserRepositoryExtensionImpl

Crud扩展名:

@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;

}...

}

但是,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?

一种可能的,但达不到理想的解决办法是注入和EntityManagerUserRepositoryImp,但在这种情况下,我没有获得任何所提供的春天JPA的方法CrudRepository,或任何其他方法,我可能在UserRepository创造。

关于如何解决这个问题的任何建议?

任何帮助将不胜感激。

编辑:正如@shelley的答案中所述,我能够通过进行3个更改来解决此问题:

  • @Repository从中删除UserRepositoryExtensionImpl
  • 重命名UserRepositoryExtensionImplUserRepositoryImpl。显然,这使Spring意识到了实现的存在。见spring文件
  • 删除我的构造函数并将其@Autowired移到该userRepository字段

成功!

回答:

为了使它起作用,需要更改一些小事项:

  • @Repository从自定义存储库界面(UserRepositoryExtension)中删除注释。

  • 自定义存储库实现实际上应命名为“ <StandardRepository>Impl”,而不是“ <CustomRepository>Impl”。在您的代码示例中,应使用UserRepositoryImpl而不是UserRepositoryExtensionImpl

以上是 我的自定义存储库实现中的CrudRepository 的全部内容, 来源链接: utcz.com/qa/405554.html

回到顶部