循环依赖问题BeanCurrentlyInCreationExcepiton
- Spring容器将每个正在创建的bean标识放在一个“当前创建bean池”中,bean标识符在创建过程中一直保持在这个池中,如果在创建bean过程中,发现自己已经在“当前创建bean池”时,将抛出BeanCurrentlyInCreationExcepiton。而对于创建完毕的bean将从“当前创建池”中清除。
解决方法
- Spring容器创建类A时,首先根据无参构造器创建bean,并暴露一个"ObjectFactory"用于返回一个提前暴露一个创建中的bean,并将A标识放入“当前创建池”中,然后创建类B
- Spring容器创建类B时,首先根据无参构造器创建bean,并暴露一个"ObjectFactory"用于返回一个提前暴露一个创建中的bean,并将A标识放入“当前创建池”中,然后创建类C
- Spring容器创建类C时,首先根据无参构造器创建bean,并暴露一个"ObjectFactory"用于返回一个提前暴露一个创建中的bean,并将A标识放入“当前创建池”中,然后创建类A时,由于提前暴露了"ObjectFactory"从而使用它返回提前暴露一个创建中的bean
- 最后在依赖注入A和B,完成C创建