Spring源码:Bean创建、Bean获取
Bean是怎么被创建,如何获取Bean,基于Spring 5.3.24版本,Spring Boot 可用 2.7.6
结论:
- 创建:非懒加载的单实例bean在容器创建的时候创建,通过
beanFactory
的doGetBean
方法,利用反射进行创建,创建完后存储在名为singletonObjects
的map 集合里,key为bean名称,value为bean对象 - 获取:获取bean时通过调用doGetBean方法从之前的map集合里进行获取
创建Bean
第一步:编写基础代码,编写一个实体类,在applicationContext配置文件中注册,跟断点进行调试
这个refresh 很重要,
初始化非懒加载的单例 Bean
和上面方法注释一样
查看它的实现,如果有多个实现类,需要Debug的方式去跳转
来到DefaultListableBeanFactory
如果不是FactoryBean
注释很明显,写的创建bean实例,而且我们这个是单例bean
这里必须用断点的形式,然后进入该方法
可以看到又回到了doGetBean
方法里的createBean
这里
然后通过断点进入该方法
断点进去
使用无参构造实例化
看到通过反射创建了对象,newInstance 方法
何时加入容器中,在getSingleton 方法里创建完对象后
获取Bean
在 getBeanFactory()
后调用 getBean()
可以看到这里又调用 doGetBean
方法
最后得到bean