• Spring学习(3) Bean的作用域和生命周期


    Bean的作用域

    1.语法

    在bean标签加上属性scope就可以了

    2.四个作用域

    • 在Spring中,可以在bean标签的scope属性设置bean的作用域,可以决定这个bean是单例的还是多实例的
    • 默认情况,Spring只为每个在IOC容器里面声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例,所有后续的getBean()调用和bean引用都将返回这个唯一的bean实例,这个作用域被称为singleton,它是所有bean的默认作用域
    • 当bean的作用域是单例时,Spring会在IOC容器对象创建的时候就创建bean的对象实例。
    • 当bean的作用域是prototype时,IOC容器在获取bean的实例时创建bean的实例对象,而且每调用一次getBean()就创建一个实例
    作用域描述
    singleton
    在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值
    prototype每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()
    request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
    session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
    • singleton:单例

      • 对象创建时机:创建容器对象时,spring同时创建一个bean对象 ,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。
    • prototype:多例

      • 创建容器对象的时候,没有执行构造器
      • 使用getBean()获取对象的时候,构造器执行了
      • 对象的创建时机:getBean()方法被调用的时候,创建对象执行
    • request:请求域

      • 当前请求有效,离开请求域失效
      • 当前请求:url不变就是当前请求
    • session:会话域

      • 当前会话有效,离开当前会话失效
      • 当前会话:当前浏览器不关闭不更换

    在这里插入图片描述
    在这里插入图片描述

    Bean的生命周期

    1.Bean的生命周期

    Spring的IOC容器可以管理bean的生命周期,Spring运行在bean生命周期内特定的时间点执行指定的任务
    (1)Spring的IOC容器对bean的生命周期进行管理的过程
    ①通过构造器或工厂方法创建bean实例
    ②为bean的属性设置值和对其他bean的引用
    ③bean可以使用
    (2)配置bean的时候,可以通过init-method和destroy-method属性为bean指定初始化和销毁的方法

    配置这两个方法之后的生命周期过程
    ①通过构造器或工厂方法创建bean实例
    ②为bean属性设置值和对其他bean的引用
    ③调用bean的初始化方法
    ④使用bean
    ⑤当容器关闭的时候,调用bean的销毁方法
    在这里插入图片描述
    在这里插入图片描述

    2.bean的后置处理器

    • bean的后置处理器允许在调用初始化方法前后对bean进行额外的处理
    • bean后置处理器对IOC容器里面的所有bean实例逐一处理,而非单一实例,它的典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性
    • bean后置处理器需要实现的接口org.springframework.beans.factory.config.BeanPostProcessor
    • 在初始化方法被调用前后,Spring把每个bean实例分别传递给上述接口的以下两个方法:
    • postProcessorBeforeInitialization(Object,String)
    • postProcessorAfterInitialization(Object,String)

    如何实现
    ①实现BeanProcessor接口
    ②重写postProcessorBeforeInitialization和postProcessorAfterInitialization方法
    ③在容器中装配后置处理器
    在这里插入图片描述
    在这里插入图片描述
    注意:装配后置处理器会为当前容器的每一个bean都装配后置处理器,不能为局部装配后置处理器

  • 相关阅读:
    RabbitMQ学习总结(11)—— RabbitMQ 核心概念与架构
    华为OD:求字符串中所有整数的最小和
    再下一城 | “GBASE数据库中华行—上海站”圆满落幕
    物联网-业务数据智能管理应用设计
    AUTOSAR从入门到精通100讲(150)-SOA架构及应用
    如何让VSR又稳又快——高效视频超分中的残差稀疏连接学习
    【系统架构设计】架构核心知识: 3.8 ADL和产品线
    作为一个十年卷王,告诫你们年轻人应该如何才能认清自己的价值
    当用Kiel打开代码时,电脑显示只读
    OpenCV----Adabins单目深度估计LibTorch推理
  • 原文地址:https://blog.csdn.net/qq_52797170/article/details/125495835