@Configuration
public class Test1 {

    @Autowired
    private Test3 test3;

}

@Configuration
public class Test2 {

    @Autowired
    private Test3 test3;

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


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


  造成原因:
  org.springframework.beans.factory.BeanCreationException:创建名称为“ test1”的bean时出错:自动连接依赖项的注入失败;
  嵌套异常为
  org.springframework.beans.factory.BeanCreationException:无法自动连线字段:私有Test3 com.package.name.Test1.test3;
  
  嵌套异常为
  org.springframework.beans.factory.BeanCreationException:创建名称为“ test2”的bean时出错:自动连接依赖项的注入失败;
  嵌套异常为
  org.springframework.beans.factory.BeanCreationException:无法自动连线字段:私有Test3 com.package.name.Test2.test3;
  
  嵌套的异常是org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名称为“ test3”的bean时出错:当前正在创建请求的bean:是否存在不可解析的循环引用?


这是循环依赖的一个例子吗?如果是这样,则有解决此问题的任何想法。

最佳答案

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

@Configuration
public class Test2{

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

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


而且,的确,您不应该执行您想做的事情,因为在构造类时将@Autowired字段注入到类中,并且此时不存在名为Test3的bean,因为它是由所构造的类的方法定义的。从理论上讲,您可以将此@Bean方法定义为静态方法,并且可以自动装配该方法,但您不应这样做。

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

10-07 15:21