application context中的一些bean的依赖关系形成了一个循环

新手上路,请多包涵

我正在使用 JPA 开发 Spring Boot v1.4.2.RELEASE 应用程序。

我定义了存储库接口和实现

储存库

@Repository
public interface ARepository extends CrudRepository<A, String>, ARepositoryCustom, JpaSpecificationExecutor<A> {
}

ARepository自定义

@Repository
public interface ARepositoryCustom {
    Page<A> findA(findAForm form, Pageable pageable);
}

ARepositoryImpl

 @Repository
public class ARepositoryImpl implements ARepositoryCustom {
    @Autowired
    private ARepository aRepository;
    @Override
    public Page<A> findA(findAForm form, Pageable pageable) {
        return aRepository.findAll(
                where(ASpecs.codeLike(form.getCode()))
                .and(ASpecs.labelLike(form.getLabel()))
                .and(ASpecs.isActive()),
                pageable);
    }
}

和一个服务 AServiceImpl

 @Service
public class AServiceImpl implements AService {
    private ARepository aRepository;
    public AServiceImpl(ARepository aRepository) {
        super();
        this.aRepository = aRepository;
    }
    ...
}

我的应用程序不会以消息开头:

******************************
应用程序启动失败
******************************

描述:

application context中的一些bean的依赖关系形成了一个循环:

|存储库实现
└──────┘

我遵循了 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.single-repository-behaviour 中描述的所有步骤

请帮忙 !

洛朗

原文由 Laurent Maillet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 882
2 个回答

对于您的原始问题,有一个简单的修复方法:只需从 ARepositoryCustom 和 ARepositoryImpl 中删除 @Repository。保留所有命名和接口/类层次结构。他们都很好。

原文由 Andrei Pietrusel 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 @Lazy

打破循环的一种简单方法是让 Spring 延迟初始化其中一个 bean。也就是说:它不会完全初始化 bean,而是创建一个代理将其注入到另一个 bean 中。注入的 bean 只会在第一次需要时被完全创建。

 @Service
public class AServiceImpl implements AService {
    private final ARepository aRepository;
    public AServiceImpl(@Lazy ARepository aRepository) {
        super();
        this.aRepository = aRepository;
    }
    ...
}

来源: https ://www.baeldung.com/circular-dependencies-in-spring

原文由 Padi kodwo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题