@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();
}