Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.springframework.beans.factory.beancurrentlyIncremationException:Spring循环依赖项-构造函数自动关联_Java_Spring - Fatal编程技术网

Java org.springframework.beans.factory.beancurrentlyIncremationException:Spring循环依赖项-构造函数自动关联

Java org.springframework.beans.factory.beancurrentlyIncremationException:Spring循环依赖项-构造函数自动关联,java,spring,Java,Spring,旧代码: @Component("someFactory") public class SomeFactoryImpl implements SomeFactory{ @Autowired private List<SomeTransformer<?, ?>> someTransformers; @组件(“someFactory”) 公共类SomeFactoryImpl实现SomeFactory{ @自动连线 私有列表>一些变压器; @自动连线 公共S

旧代码:

@Component("someFactory")
public class SomeFactoryImpl implements SomeFactory{

    @Autowired
    private List<SomeTransformer<?, ?>> someTransformers;
@组件(“someFactory”)
公共类SomeFactoryImpl实现SomeFactory{
@自动连线
私有列表>一些变压器;
@自动连线
公共SomeFactoryImpl(列表检查(查找“循环依赖项”)

与典型情况(没有循环依赖项)不同,循环 bean A和bean B之间的依赖关系迫使其中一个bean 在完全初始化自身之前注入另一个(a 经典的鸡/蛋场景)

区别在于:

Setter injection中,bean引用只有在需要时才会构造。在用@required注释Setter时,您可能会重新创建Setter injection的相同问题,因为这将导致立即创建bean

在构造函数注入中,Spring无法决定应该首先创建哪个bean,因为它们相互依赖。问题会立即暴露出来。一种可能的解决方法是使用带@Lazy注释的构造函数注入

@Component
public class CircularClassA {

    private CircularClassB classB;

    @Autowired
    public CircularDependencyB(@Lazy CircularClassB classB) {
        this.classB = classB;
    }
}
这将只创建classB的代理,而不是完全初始化它。它会在需要时完全初始化,就像setter注入一样。

检查(查找“循环依赖项”)

与典型情况(没有循环依赖项)不同,循环 bean A和bean B之间的依赖关系迫使其中一个bean 在完全初始化自身之前注入另一个(a 经典的鸡/蛋场景)

区别在于:

Setter injection中,bean引用只有在需要时才会构造。在用@required注释Setter时,您可能会重新创建Setter injection的相同问题,因为这将导致立即创建bean

在构造函数注入中,Spring无法决定应该首先创建哪个bean,因为它们相互依赖。问题会立即暴露出来。一种可能的解决方法是使用带@Lazy注释的构造函数注入

@Component
public class CircularClassA {

    private CircularClassB classB;

    @Autowired
    public CircularDependencyB(@Lazy CircularClassB classB) {
        this.classB = classB;
    }
}

这将只创建classB的代理,而不是完全初始化它。它会在需要时完全初始化,就像setter注入一样。

我想你有多个定义了SomeTransformer类型的bean,你想注入它们吗?你能发布这些bean的代码吗?你使用什么类型的配置?XML?注释?是的,我可能有一些循环依赖,但我的问题是为什么它在旧代码上工作?spring在这里是如何工作的?我不想修复循环性,但知道在两个代码中解析bean的区别是什么?假设您有多个bean定义为您希望注入的SomeTransformer类型?您可以发布这些bean的代码吗?您需要什么类型的配置使用?XML?注释?是的,我可能有一些循环依赖,但我的问题是为什么它在旧代码上工作?spring在这里是如何工作的?我不想修复循环性,但知道在两个代码中解析bean的区别是什么