您能告诉我为什么在我的情况下,如果"simple"
bean具有循环依赖性,为什么会创建它?在我看来,必须抛出一个关于循环依赖的异常!
配置类:
package config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "service")
public class AppConfig {
}
简单类:
package service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Simple {
@Autowired
private Simple simple;
public Simple getSimple() {
return simple;
}
}
启动器:
import config.AppConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import service.Simple;
public class Launcher {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
Simple simple1 = ctx.getBean("simple", Simple.class);
System.out.println(simple1.getSimple());
}
}
应用程序的输出为“ service.Simple@6b53e23f”。如果我添加构造函数
@Autowired
public Simple(Simple simple) {
this.simple = simple;
}
然后发生异常"Error creating bean with name 'simple': Requested bean is currently in creation: Is there an unresolvable circular reference?"
。
那当我在字段中放置@Autowired
时为什么创建了bean?
答案 0 :(得分:3)
因为仅在创建simple
实例后 完成Simple
字段的设置,此时您有一个有效的Simple
实例可分配给领域。那就是场注入。创建Simple
类的实例时,不需要自动装配字段的实例。
另一方面,使用构造函数注入,您需要所有构造函数参数的有效实例。因此,您需要一个Simple
实例来创建一个Simple
实例,这当然是行不通的。
答案 1 :(得分:0)
因此,在春季尝试创建bean时,它首先尝试解决所有自动装配(依赖注入)的问题。在我们的情况下,您尝试注入相同的类。这意味着,Spring在创建Simple bean时会尝试解析注入的类,而这些类又是同一类。
有一个循环依赖项会引发错误。