分析Spring单例Bean初始化和循环依赖解决方式

Spring IoC 容器会在运行时检测到构造函数注入循环引用,并抛出 BeanCurrentlyInCreationException。Spring 会自动解决基于 setter 注入的循环依赖,所以开发中可以通过使用 setter 注入替代构造函数注入的方式避免循环依赖的异常问题。但是通常我们都是都使用 @Autowired 注解来注入属性,@Autowired 是通过反射进行赋值的,分析一下看 Spring 是如何解决循环依赖的。

单例Bean的创建

Spring容器中默认Bean都是单例的,简单说下Bean创建的入口。从SpringBoot启动流程分析过上下文创建入口,通常MVC应用的上下文对象是AnnotationConfigServletWebServerApplicationContext这个类。这个类的refresh()方法通过调用父类AbstractApplicationContext的refresh()方法实现了初始化的一系列操作。其中this.finishBeanFactoryInitialization(beanFactory)方法就初始化Bean的方法。

猜你喜欢

转载自blog.csdn.net/qq_29569183/article/details/113249932