• 理解Spring Bean的创建过程和生命周期


    Spring Bean的生命周期

    总体流程概述

    • 实例化
    • 属性赋值
    • 初始化
    • 销毁

    总体的流程图

    在这里插入图片描述

    实例化

    众所周知,Spring IOC将bean创建的工作转移给了Spring容器类,可以看作一个工厂,比较常见的容器类有BeanFactory和ApplicationContext(实现了BeanFactory接口,提供了更多功能,如国际化)。同时,容器类的底层可以简单的看作一个Map结构,key为beanname,value为bean实例。

    属性赋值

    对于构建的实例,我们需要设置属性。那么属性设置从哪里来?定义一个BeanDefinition类,里面包含class类型、方法的构造参数、bean的属性、scope等。同时考虑bean中包含其他bean时,Spring该如何处理?这就涉及到Spring的三级缓存了,这里不展开叙述。

    一般来说我们可以通过配置xml文件来配置bean的相关属性,这里就需要考虑如何读取xml文件。Spring中就定义了资源和资源加载器类,实现可以从文件系统、classpath以及网络等读取资源。

    同时Spring中还提供了BeanFactoryPostProcessor接口,实现在bean初始化前的bean属性的修改

    初始化

    初始化主要的过程就是执行InitializingBean接口中定义的afterPropertiesSet方法,在这过程中可以执行自定义的初始化方法。

    同时在bean初始化前后,Spring也提供两个比较重要的接口操作。第一个就是Aware接口,Aware接口使得bean获得感知的能力,例如知道创建自己的容器对象。第二就是BeanPostProcessor接口,提供了两个主要的方法,分别在bean实例化前后执行,实现对bean的修改操作,是实现AOP的关键。

    销毁

    和初始化相对应,执行的是DisposableBean接口的destroy方法,在这过程可以指定自定义的销毁方法。

    同时对于不同作用域的bean在此处的执行步骤也不同。

    参考:
    简化版的spring框架,对于理解ioc和aop很有帮助
    Spring Bean的生命周期

    作者水平有限,错误之处望指正

  • 相关阅读:
    RibbonPage
    蓝桥杯---列名
    在构建Docker镜像时报错: Unable to locate package libcudnn7
    万字深剖 Linux I/O 原理
    解锁 DevOps 精通:成功的综合指南
    使用springboot2.1版本之后数据库连接需要注意的事项
    C语言结构体指针学习
    LSTM 浅析
    解决在pycharm中使用matplotlib画图问题
    Java中long(Long)与int(Integer)之间的转换
  • 原文地址:https://blog.csdn.net/weixin_40096160/article/details/125493084