首页 > 编程语言 > 详细

spring源码分析-bean创建(流程图)

时间:2020-05-10 09:36:20      阅读:160      评论:0      收藏:0      [点我收藏+]
bean的生命周期把它总结为以下几个阶段
  • 实例化
  • 属性注入/依赖注入
  • 初始化
  • 销毁
其中实例化、属性注入、初始化属于bean创建的过程。

bean创建的过程流程图
技术分享图片
技术分享图片
(1)当spring容器在启动的时候或者启动完成后显示调用getBean方法时来获取bean实例的时候,都会调用这个doGetBean方法
  • doGetBean方法首先通过调用getSingleton判断这个bean能不能拿到,如果可以直接返回;
  • doGetBean会根据不同的作用域,执行不同的操作
 
(2)Bean的创建,主要是通过调用doCreateBean方法
  1. 实例化,调用createBeanInstance方法
  2. 属性注入,调用populateBean方法
  3. 初始化,调用initializeBean方法
 
(3)实例化,主要是通过调用createBeanInstance,又分两步:
  1. 通过resolveBeanClass获取beanClass对象,如果此类之前加载过直接返回,如果没有加载过则通过ClassLoader加载;
  2. 实例化,通过无参构造方式实例化或通过@Autowire注解的构造方法实例化
 
(4)属性注入,主要是通过调用populateBean方法
  1. 通过AutowiredFieldElement或AutowiredMethodElement调用inject方法
  2. bean注入最终又会调用getBean方法(循环依赖产生的地方)
  3. 拿到bean对象后,通过反射完成属性注入
 
(5)初始化,主要是通过调用initializeBean方法(初始化东西最多)
         5.1 调用实现Aware接口的方法:
  • 调用 BeanNameAware 的 setBeanName 方法
  • 调用 BeanClassLoaderAware 的 setBeanClassLoader
  • 调用 BeanFactoryAware 的 setBeanFactory 方法
        5.2 执行 BeanPostProcessor 的预初始化方法
  • 调用 EnvironmentAware 的 setEnvironment 方法
  • 调用 EmbeddedValueResolverAware 的 setEmbeddedValueResolver 方法
  • 调用 ResourceLoaderAware 的 setResourceLoader 方法
  • 调用 ApplicationEventPublisherAware 的 setApplicationEventPublisher 方法
  • 调用 MessageSourceAware 的 setMessageSource 方法
  • 调用 ApplicationContextAware 的 setApplicationContext 方法
  • 调用 BeanPostProcessor 的预初始化方法
       5.3 调用普通初始化方法  
  • 调用 afterPropertiesSet 方法
  • 调用 用户定义的初始化方法,即init-method 属性配置的方法
注意:上面初始化方法从上至少是按照顺序执行的

spring源码分析-bean创建(流程图)

原文:https://www.cnblogs.com/caoxb/p/12861629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!