美文网首页我的文章-Spring
创建及初始化bean过程

创建及初始化bean过程

作者: 飞翔的鲲 | 来源:发表于2018-08-06 17:16 被阅读4次

概述

  1. 定义所有beanDefinitions
  2. 遍历这些beanDefinitions,创建bean,整个过程在doCreateBean()中
  3. 创建bean过程:先new对象,再注入属性,最后调用初始化方法(后处理器等)

详细过程


  • BeanDefinition载入、解析、注册
    1、找到配置文件Resource。
    2、将配置文件解析成BeanDefinition
    3、将BeanDefinition向Map中注册 Map<name,beandefinition>
    通过上述三个步骤我们将配置在配置文件中的<bean/>节点,全部封装到上述的Map<name,beandefinition>中。为后续的getBean()打下了基础。
    这个过程大概可以理解为,
    1:找到原材料
    2:把原材料装进容器里
  • bean的实例化和依赖注入
    此过程由getBean()方法触发
image.png image.png

创造 bean


image.png

完成 创建bean

image.png

最终创建bean, 根据bean定义,同时生成了注入属性,但值为null,还没注入属性对象。


image.png

填充属性,实现依赖注入,bean中的依赖bean是在这里注入的!


image.png

此过程根据上述的BeanDefition,

1:通过反射或者Cglib的方式创造bean
2:根据配置的依赖将所需要的bean注入进来,此过程会递归调用getBean()方法。
3:根据bean的scope决定是否缓存该Bean,一般情况为单例。容器会缓存该对象。

这个过程大概可以理解为

将原材料进行加工,创造可以直接利用的产品。

到此,spring容器就可以对外提供服务了。

bean注入属性bean过程


  • 填充bean属性


    image.png
  • 使用后处理器填充属性,这里会有多个后处理器,填充多种不同的属性。
    AbstractAutowireCapableBeanFactory.populateBean()


    image.png

多个填充属性后处理器


image.png
  • 注解方式注入bean地方,终于找到了!
    CommonAnnotationBeanPostProcessor.postProcessPropertyValues()

image.png
  • xml方式注入bean地方,这里的属性都是xml里面配置的 property。
    CommonAnnotationBeanPostProcessor.postProcessPropertyValues()

image.png

调用初始化方法过程


创建对象时一共有四个地方可以让我们操作这个对象。


image.png
  1. 首先调用织入方法
    织入方法会根据类型调对应方法。
    所以实现了对应接口就能获取到对应的对象了。


    image.png
  2. 调用初始化前后处理器
    实现了这个接口,就能够被调用到了。
    注意:所有bean都会调用这个后处理器,如果有多个后处理器,都会被调用,又饿order属性,可以控制这些后处理器的调用顺序。

public interface BeanPostProcessor {
    Object postProcessBeforeInitialization(Object var1, String var2) throws BeansException;

    Object postProcessAfterInitialization(Object var1, String var2) throws BeansException;
}
  1. 调初始化方法
    这里后先调用InitializingBean的afterPropertiesSet方法。
    再调我们自己配置的init方法,比如这样。
<bean class="com.ymm.trade.es.utils.MyBeanPostProcessor" init-method="init"/>
image.png
  1. 调初始化后的后处理器
    和第2步一样。

相关文章

  • Spring生命周期

    1. @Bean初始化和销毁 1.1 bean的生命周期:   bean创建-----初始化-----销毁的过程 ...

  • Bean的初始化过程

    Bean的初始化过程 bean创建-->初始化-->摧毁 容器管理bean的声明周期 我们可以自定义初始化...

  • 创建及初始化bean过程

    概述 定义所有beanDefinitions 遍历这些beanDefinitions,创建bean,整个过程在do...

  • Spring 生命周期

    Bean生命周期 Bean创建 --> 初始化 --> 销毁过程 容器管理Bean生命周期 自定义初始化和销毁方法...

  • 3、bean生命周期

    前面讲了bean的创建和注入,这一节将介绍bean的生命周期。 bean的生命周期过程: bean创建---初始化...

  • Spring注解06 @Bean生命周期

    bean的生命周期:bean创建---初始化----销毁的过程容器管理bean的生命周期: 我们可以自定义初始化和...

  • Spring bean 生命周期

    bean的生命周期:bean创建---初始化----销毁的过程容器管理bean的生命周期;我们可以自定义初始化和销...

  • Spring源码学习③-生命周期

    Bean生命周期: Bean创建=》初始化=》销毁的过程,我们称之为Bean的生命周期。 Spring里面...

  • 更多DI的知识

    3.3.1 延迟初始化Bean延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初...

  • Spring bean的生命周期

    Spring bean的生命周期 生命周期 bean从创建 -> 初始化 -> 销毁的过程 默认情况下 bean的...

网友评论

    本文标题:创建及初始化bean过程

    本文链接:https://www.haomeiwen.com/subject/nhsgvftx.html