【发布时间】:2017-06-26 18:31:55
【问题描述】:
我对 Spring 框架有疑问。所以假设有以下代码:
@Service
@Scope("prototype")
public class A
{
@Autowired
private B b;
public void foo()
{
System.out.println("A foo");
}
}
@Service
@Scope("prototype")
public class B
{
@Autowired
private A a;
public void foo()
{
System.out.println("B foo");
}
}
并且有以下代码启动应用程序上下文:
@SpringBootApplication
public class DemoApplication
{
@Autowired
private A a;
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class, args);
}
}
如果我启动 spring 上下文,那么它将抛出循环引用异常(这是预期的)。我的问题是为什么如果我将 bean A 的范围更改为单例,那么一切都会正常工作?
【问题讨论】:
-
使用原型作用域,您将创建一个 A,这将创建一个 B,这将创建一个 A,这将创建一个 B……永远。使用单例范围,您将创建一个 A,这将创建一个 B,它将自动连接回 A。