一个简单的单例本的获取过程

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中使用 的别名

  1. <beans>
  2. <bean id="zhangSan" class="com.demo.ZhangSan">
  3. </bean>
  4. <alias name="zhangSan" alias="erGouZi">
  5. </alias>
  6. </beans>

org.springframework.beans.factory.support.AbstractBeanDefinition#getDependsOn

指定依赖对象: 在xml中使用 depends-on 属性来指定依赖。

  1. <beans>
  2. <!--表示zhangsan 依赖对象Lisi,只有lisi初始化好了之后再初始化,zhangsan。-->
  3. <bean id="zhangSan" depend-on="list" class="com.demo.ZhangSan">
  4. </bean>
  5. <bean id="liSi" class="com.demo.LiSi">
  6. </bean>
  7. <alias name="zhangSan" alias="erGouZi">
  8. </alias>
  9. </beans>