首页
学习
活动
专区
工具
TVP
发布

码猿技术专栏

欢迎关注微信公众号【码猿技术专栏】
专栏作者
290
文章
298633
阅读量
51
订阅数
Spring解决循环依赖
1、Husband创建Bean,先判断缓存池中是否存在,存在直接返回,不存在进入createBean创建的流程,调用构造方法创建一个早期的Bean【未进行属性赋值】,创建成功将其放入二级缓存earlySingletonObjects中,之后又调用addSingletonFactory方法将其放入三级缓存中并且将二级缓存中的移除,之后调用populateBean为属性赋值,在@Autowired的后置处理器中查找需要注入的依赖,发现Husband中的一个属性Wife,因此调用getBean方法从容器中获取,但是此时的Wife还未创建,因此又进入了doGetBean的流程,但是此时Wife并没有创建,因此在一二三级缓存中不能获取,又执行createBean方法创建Wife,同样调用构造方法创建一个早期Bean放入二级缓存中,调用addSingletonFactory放入三级缓存并移除二级缓存,然后调用populateBean方法为Wife属性赋值,在@Autowired的后置处理器中查找需要注入的依赖,发现Wife类中有一个属性是Husband,因此调用getBean方法,再次调用doGetBean获取Husband,但是此时的Husband已经创建成功【未赋值】,存放在三级缓存中,因此直接从三级缓存中取出Husband赋值给Wife属性,至此Wife属性已经赋值成功,直接添加到一级缓存(singletonObjects)中并且移除三级缓存,直接返回给Husband赋值,因此Husband中的属性也持有了Wife的引用,都创建并且赋值成功了。
爱撒谎的男孩
2019-12-31
8380
mybatis深入学习
文章目录 1. 环境搭建 2. typeAliases(别名) 2.1. 内建的别名【推荐使用】 3. 参数处理 3.1. 单个参数 4. 多个参数 4.1. 参数是Map类型 4.2. POJO【推荐使用】 5. 返回结果封装 5.1. 返回POJO 5.2. 返回List 5.3. 返回Map 5.4. ResultMap 6. 分步查询 6.1. 延迟加载 7. 内置参数 8. 批量处理 8.1. Mybaits-Spring执行批量处理 9. 类型处理器(TypeHandler) 9.1. 实例
爱撒谎的男孩
2019-12-31
1K0
自己写springmvc框架
文章目录 1. 简易的springmvc框架 1.1. 三层架构 1.2. 什么是mvc 1.2.1. 好处 1.3. 实现 1.3.1. 思想 1.3.2. 创建注解RequestMapping 1.3.3. 创建Handler类 1.3.4. config.xml(resource目录下) 1.3.5. XMLUtils 1.3.6. HandlerMapping 1.3.7. 视图解析器 1.3.8. DispatcherServlet 简易的springmvc框架 三层架构 表示层(视图层,显示
爱撒谎的男孩
2019-12-31
6800
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档