# lite-spring-transfer **Repository Path**: shawnisacoder/lite-spring-transfer ## Basic Information - **Project Name**: lite-spring-transfer - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lite Spring Transfer 如何启动 ```shell script mvn tomcat7:run ``` 视频说明见[这里](lite-spring-transfer讲解.mp4) ## Spring是如何解决循环依赖的? Spring是通过三层缓存来解决循环依赖的问题的。这三层缓存分别为: 1. `singletonObjects`:一级缓存,存放完整的`Bean`对象; 2. `earlySingletonObjects`:二级缓存,存放不完整的`Bean`对象。 所有的二级缓存对象都是由三级缓存对象升级得到; 3. `singletonFactories`:三级缓存。其存放是实际上是一个`Lambda`对象。 该`Lambda`能够得到不完整的`Bean`对象; 假设,有`BeanA`依赖于`BeanB`,`BeanB`依赖于`BeanA`,如下: ```java public class BeanA { private BeanB b; // getter and setter } public class BeanB { private BeanA a; // getter and setter } ``` 配置文件如下: ```xml ``` 在经过如下调用链之后,开始创建`Bean`对象 ![Before_Create_Bean](doc/questions/Before_Create_Bean.png) 详细的创建循环依赖的步骤如下图所示,原始资源文件在[这里](doc/questions/Create_Cyclic_Beans.png): ![Create_Cyclic_Beans](doc/questions/Create_Cyclic_Beans.png)