当前位置: 首页 > news >正文

Spring中Bean的作用域和生命周期

目录

  • bean 的六种作用域
    • 单例作用域:
    • prototype:原型作用域
    • request:请求作用域:
    • session:会话作用域:
    • Application: 全局作用域 :
  • Bean的生命周期
    • 实例化
    • 属性赋值:
    • 初始化:
    • 使用bean
    • 销毁bean

bean 的六种作用域

Bean 的作用域是指 Bean 在 Spring 框架中的某种行为模式,比如单例作用域,在spring中只有一份是全局共享的


作用域说明
singleton每个SpringIoC容器内同名称的bean只有一个实例(单例)(默认)
prototype每次使用该bean时会创建新的实例(非单例)
request每个HTTP 请求⽣命周期内, 创建新的实例(web环境中, 了解)
websocket每个WebSocket⽣命周期内, 创建新的实例(web环境中, 了解)
session每个HTTP Session⽣命周期内, 创建新的实例(web环境中, 了解)
application每个ServletContext⽣命周期内, 创建新的实例(web环境中, 了解)

下面通过看每个对象的地址来查看,Dog对象的某种行为模式

单例作用域:

每个SpringIoC容器内同名称的bean只有一个实例

@AutowiredApplicationContext context;@Resource(name = "singleDog")Dog singleDog;@RequestMapping("/singleton")public String singleton(){Dog contextDog = context.getBean("singleDog",Dog.class);return "contextDog: " + contextDog + " resources: " + singleDog;}

在这里插入图片描述

prototype:原型作用域

** 每次使用该bean时会创建新的实例**


@Bean@Scope("prototype")public Dog prototypeDog(){return new Dog();}//从spring上下文获取
@RequestMapping("/prototy")public String prototy(){Dog contextDog = context.getBean("prototypeDog",Dog.class);return "contextDog: " + contextDog + " resources: " + singleDog;}

在这里插入图片描述

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

request:请求作用域:

每个HTTP 请求生命周期内, 创建新的实例

@Bean@RequestScopepublic Dog requestDog(){return new Dog();}//从spring上下文获取@RequestMapping("/request")public String request(){Dog contextDog = context.getBean("requestDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +requestDog;}

在这里插入图片描述

#一级目录

session:会话作用域:

每个HTTP Session⽣命周期内, 创建新的实例


@Bean@SessionScopepublic Dog sessionDog(){return new Dog();}//从spring上下文获取@RequestMapping("/session")public String session(){Dog contextDog = context.getBean("sessionDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +sessionDog;}

在这里插入图片描述

Application: 全局作用域 :

每个ServletContext生命周期内, 创建新的实例(web环境中, 了解)

//原对象
@Bean@ApplicationScopepublic Dog applicationDog(){return new Dog();}//从spring上下文获取@RequestMapping("/application")public String application(){Dog contextDog = context.getBean("applicationDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +applicationDog;}

在这里插入图片描述

Bean的生命周期

生命周期指的是⼀个对象从诞生到销毁的整个生命过程, 我们把这个过程就叫做⼀个对象的生命周期,bean对象生命周期可以分为5个部分

实例化

就是为Bean分配内存空间

属性赋值:

通过bean注入和装配的方式, 如@AutoWired,@resource

初始化:

执行各种通知,在AutowireCapableBeanFactory接口中有定义AbstractAutowireCapableBeanFactory和AbstractBeanFactory方法中实现

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

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

使用bean

销毁bean

销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接口⽅法, destroymethod.

http://www.xdnf.cn/news/50707.html

相关文章:

  • PICO4 Ultra MR开发 空间网格扫描 模型导出及预览
  • 【外研在线-注册/登录安全分析报告】
  • 聚宽策略----国九条后中小板微盘小改,年化135.40%
  • 【leetcode刷题日记】lc.152-乘积最大子数组
  • C++(23)—模板初阶
  • 计算机组成原理笔记(十七)——4.2定点加减运算
  • 再探模板与泛型编程
  • RocketMQ实现基于可靠消息的最终一致性
  • Java处理字符串用啥?String、StringBuilder、StringBuffer
  • Spring Boot自动装配原理(源码详细剖析!)
  • 计算机是如何看待数据的?
  • Java之封装(学习笔记)
  • 算法分析传输加密数据格式密文存储代码混淆逆向保护
  • 4.19-4.20学习总结 网络编程+反射+动态代理
  • AI大模型发展现状与MCP协议诞生的技术演进
  • music21:伍佰 《挪威的森林》MIDI 音乐分析
  • Centos9 离线安装 MYSQL8
  • 【python编程从入门到到实践】第四章 操作列表
  • 进程控制(linux+C/C++)
  • day47——平方数之和(LeetCode-633)
  • javase 学习
  • SQL语句执行顺序
  • QML Universal样式
  • 在 Debian 12 中恢复被删除的 smb.conf 配置文件
  • Python基础总结(八)之循环语句
  • 【RabbitMQ | 第2篇】RabbitMQ 控制台实现消息路由 + 数据隔离
  • 本地化部署ASR服务程序:以FastASR为例
  • 使用 NEAT 进化智能体解决 Gymnasium 强化学习环境
  • 通过 WebSocket 接收和播放 WSS 协议视频流
  • Transformers是一种基于自注意力机制的神经网络模型