栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring IOC 源码学习一(u8教你怎么读Spring源码)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring IOC 源码学习一(u8教你怎么读Spring源码)

本工程Spring5.1源码带翻译地址已经放到本人gitee,看文章反响,如果需要的人多再上连接吧;

Spring IOC 容器主要主要两个作用:1、产生bean,2、获取bean;想知道怎么产生bean,也就是bean的生命周期,先从如何获取bead入手阅读源码,u8带你了解核心思想;

一、Spring如何获取一个简单bean(源码阅读)

图中两个断点,具体看注释,获取spring容器中userService的bean再第二个断点,u8带你debug走下面流程;

第一步:getBean 

第二步:AbstractApplicationContext.getBean

第三步:AbstractBeanFactory 中 getBean方法中doGetBean

 第四步:doGetBean方法

 我们的目的:获取bean 即userService对象,那我们就应该关注本方法中,什么时候返回object,

 跟着断点走,会发现 Object sharedInstance = getSingleton(beanName); 这行会返回对象,那我   们就去看getSingleton方法中从哪里获取的对象;

 第五步:getSingleton方法解读

getSingleton中第二个boolean类型参数我们可以不用管,是循环依赖开关,我们目前只有一个userService,不需要考虑循环依赖

可以看到该方法中,Object singletonObject = this.singletonObjects.get(beanName); 获取到了Spring中具有完整生命周期的userSevice;

接下来u8带你看singletonObjects是个什么东东

 是个map,这说明什么,我们从Spring容器中获取到的bean是存在map中,也就是俗称的单例池中。至此,bean的获取流程就完成;有存就有放,那我们找下singletonObjects的put方法在哪里,也就是Spring什么时候放的。

第六步:查找singletonObjects.put()方法

1、

2、名称不对,有带early,肯定不是

3、jndiObject,看名字显然不是 

 所以,调用的是在第一个方法中调用的put方法,u8接下来把断点打到这个方法上我们来验证下;

 果然,Spring单例产生的bean是通过这个方法放到单例池中的,那我们通过这个方法中的断点倒推spring bean的完整生命周期代码流程;分9步走完;

 下一期u8带你阅读spring bean如何走完这9步的源码分析;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号