Java 当@Autowired和@Bean存在于同一类中时,BeanCurrentlyIncremationException异常

Java 当@Autowired和@Bean存在于同一类中时,BeanCurrentlyIncremationException异常,java,spring,javabeans,autowired,circular-dependency,Java,Spring,Javabeans,Autowired,Circular Dependency,上面的代码给出了以下错误 原因: org.springframework.beans.factory.BeanCreationException:创建名为“test1”的bean时出错:自动连线依赖项的注入失败; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动关联字段:private Test3 com.package.name.Test1.Test3 嵌套异常是 org.springframework.bea

上面的代码给出了以下错误

原因: org.springframework.beans.factory.BeanCreationException:创建名为“test1”的bean时出错:自动连线依赖项的注入失败; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动关联字段:private Test3 com.package.name.Test1.Test3

嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“test2”的bean时出错:自动连线依赖项的注入失败; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动关联字段:private Test3 com.package.name.Test2.Test3

嵌套异常为org.springframework.beans.factory。beanCurrentlyIncrementException:创建名为“test3”的bean时出错:请求的bean当前正在创建中:是否存在无法解析的循环引用


这是一个循环依赖的例子吗?如果是的话,您有什么想法可以解决这个问题。

您不需要自动连接在同一个类中定义的bean,因为您可以通过调用初始化方法test3()直接引用该bean

而且,事实上,您不应该做您试图做的事情,因为@Autowired字段在类的构造时被注入到类中,此时不存在称为Test3的bean,因为它是由正在构造的类的方法定义的。从理论上讲,您可以将这个@Bean方法定义为静态的,它应该可以用于autowire,但您不应该这样做

@Configuration
public class Test2{

    @Bean(name = "test3 ")
    Test3 test3 () {
        return new Test3(); 
    }

    public void exampleOfUsingTest3Bean() {
        System.out.println("My test3 bean is" + test3().toString());
    }
}

但是,Test3bean可以在Test1类中自动连接吗?可以。Spring足够聪明,能够计算出实例化Bean的顺序,这不会导致多个Test3实例吗?
@Configuration
public class Test2{

    @Bean(name = "test3 ")
    Test3 test3 () {
        return new Test3(); 
    }

    public void exampleOfUsingTest3Bean() {
        System.out.println("My test3 bean is" + test3().toString());
    }
}
@Bean(name = "test3 ")
public static Test3 test3 () {
    return new Test3(); 
}