一个简单的单例本的获取过程
bean种类
默认的单例对象(单例非懒加载)
初始化容器时,自动创建并放入到 容器中 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#singletonObjects
单例懒加载对象
原型对象
从容器中获取Bean
前面 省略
org.springframework.beans.factory.support.AbstractBeanFactory#getBean
-> org.springframework.beans.factory.support.AbstractBeanFactory#transformedBeanName 解析别名
-> org.springframework.beans.factory.support.AbstractBeanFactory#getMergedLocalBeanDefinition 获取Beran定义
-> org.springframework.beans.factory.support.AbstractBeanFactory#checkMergedBeanDefinition 判断是否是Bean注解
-> org.springframework.beans.factory.support.AbstractBeanDefinition#getDependsOn 检查是否有依赖对象没有创建好,如果需要的依赖对象没有创建好,则暂停当前的创建改为创建依赖对象
-> 开始创建Bean实例
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton
->org.springframework.beans.factory.support.AbstractBeanFactory#createBean 创建Bean的标记
-> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean 实例化Bean
-> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance 通过反射实例化早期对象(很复杂)
-> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory 保存创建的早期对象
-> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean 给早期的对象赋值 。(里面的属性)
方法的作用
org.springframework.beans.factory.support.AbstractBeanFactory#transformedBeanName
解析别名: 在xml中使用
<beans>
<bean id="zhangSan" class="com.demo.ZhangSan">
</bean>
<alias name="zhangSan" alias="erGouZi">
</alias>
</beans>
org.springframework.beans.factory.support.AbstractBeanDefinition#getDependsOn
指定依赖对象: 在xml中使用 depends-on 属性来指定依赖。
<beans>
<!--表示zhangsan 依赖对象Lisi,只有lisi初始化好了之后再初始化,zhangsan。-->
<bean id="zhangSan" depend-on="list" class="com.demo.ZhangSan">
</bean>
<bean id="liSi" class="com.demo.LiSi">
</bean>
<alias name="zhangSan" alias="erGouZi">
</alias>
</beans>