当前位置: 首页 > 知识库问答 >
问题:

在@Application bean中使用构造函数注入会导致循环引用

宣胜
2023-03-14

我有一个中等大小的Spring应用程序。当我重构一些loc时,我注意到以下行为:

事实上,注入工作正常:

public class AppConfig {

    @Autowired
    private Environment env;
…

当我尝试使用构造函数注入时,环境为空,我的应用程序告诉我,由于循环引用,它无法创建配置bean:

public class AppConfig {

    private final Environment env;
    private final IndexableService indexableService;

    @Autowired
    public AppConfig(Environment env, IndexableService indexableService) {
        this.env = env;
        this.indexableService = indexableService;
    }
…

在堆栈的某个地方:

原因:org.springframework.beans.factory.Bean货币InCreationException:创建名为appConfig的bean时出错:请求的bean当前正在创建中:是否存在无法解析的循环引用?

我尝试了一些我在网上找到的解决方案,但都没有帮助。我如何才能正确调试它?如何找到创建循环引用的位置?

编辑:

粘贴箱上的stacktrace

登录pastebin

编辑2:

可索引服务类:

package de.xx.yy.server.service;

import de.xx.yy.server.model.Indexable;

import java.util.List;

public interface IndexableService {

    List<Indexable> search(String searchString);

}

课程实施:

package de.xxx.yyy.server.service;

import de.xxx.yyy.server.model.Indexable;
import io.leangen.graphql.annotations.GraphQLArgument;
import io.leangen.graphql.annotations.GraphQLQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class IndexableServiceImpl implements IndexableService {

    private final Searcher searcher;

    @Autowired
    public IndexableServiceImpl(Searcher searcher) {
        this.searcher = searcher;
    }

    @GraphQLQuery(name = "search")
    public List<Indexable> search(@GraphQLArgument(name = "searchString") String searchString) {
        return searcher.search(searchString);
    }

}

PS:之前,我的环境刚刚被null(这就是为什么线被删除)。我无法重现空环境,现在我得到了循环引用错误。

共有1个答案

欧阳山
2023-03-14

主要问题是缺少依赖项

通过构造函数参数0表示的未满足依赖关系;嵌套异常为org。springframework。豆。工厂UnsatisfiedDependencyException:创建名为“elasticSearch”的bean时出错,该bean在文件[Users/ry77/Workspace/Campus/$PROJECT server/target/$COMPANY.$PROJECT.server-0.0.1-alpha/WEB-INF/classes/de/$COMPANY/$PROJECT/server/service/searchengine/elasticSearch.class]中定义:通过构造函数参数0表示的未满足的依赖关系;

1)@EnableAutoConfiguration或@SpringBootApplication应该出现在主类
2)确保您的pom中有依赖项

 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jpa</artifactId>
    <version>2.0.8</version>
</dependency>
    or
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
  </dependency

3) 你的弹性类应该用@Component注释,并注入@autowired

希望有帮助

 类似资料:
  • 我注意到我正在开发的应用程序中有一个奇怪的bug。在修改一个类时,我将一组属性移动到构造函数中进行自动连接,而不是使用字段注入,然而,由于循环依赖关系,这导致我在启动时出错。下面是导致错误的依赖关系的分解: 我正在尝试在TargetClass的内部使用ServiceA 服务A通过其构造函数注入了服务B 通过现场注入,服务B已注入服务C 通过现场注入,ServiceC已注入TargetClass 我

  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 建议将以下语句更改为NetBeans中的lambda表达式。 但是,当我应用假定的更改(Alt Enter)时,我得到了: 当这不会与消息一起编译时: 没有找到合适的构造函数为KeyFrame(持续时间,(事件前夕[…]}}})-参数不匹配 问题是为什么NetBeans会提出一些它无法实现的东西?如何在Timeline构造函数中实际使用lambda函数?谢谢

  • 我想在构造函数中使用Request类,这是我想运行服务器时它给我的错误: 无法自动连接服务"AppBundle\Controller\DetectServiceDetailController":方法"__construct()"引用类"Symfony\Component\HttpFoundation\Request"的参数"$ask",但不存在这样的服务。它不能自动注册,因为它来自不同的根命名空

  • 我正在尝试修改类Circle以包含第三个构造函数,用于构造具有两个参数的Circle实例——半径的双精度和颜色的字符串。还修改主类以使用此构造函数构造Circle的实例。我对此有困难,我一直收到从未使用构造函数Circle的消息。请查看代码。

  • 问题内容: 当我尝试将$ http注入到覆盖的工厂中时,出现错误: 未捕获的错误:[$ injector:cdep]找到循环依赖项:$ http <-$ exceptionHandler <-$ rootScope 任何想法如何解决?如果我使用[]注入,则$ http是未定义的 编辑 ___ _ ___ ___ _ 根据下面的答案,我尝试了: 但我仍然收到循环错误: 未捕获的错误:[$ injec