当前位置:网站首页>Bean的作用域和生命周期
Bean的作用域和生命周期
2022-07-17 08:35:00 【一个很酷的女巫_】
Bean的作用域和生命周期
一、什么是Bean的作用域
Bean的作用域可以理解为Bean在Spring整个框架中的某种行为模式,也可以理解为就是Bean的类型。
二、Bean的5种作用域
- singleton:单例作用域
- prototype:原型作用域(多例作用域)
- request:请求作用域
- session:会话作用域
- application:全局作用域
| 作用域 | 描述 |
|---|---|
| singleton | 在Spring容器中仅存在一个Bean实例,Bean以单例的形式存在。Bean在Spring中默认是单例的 |
| prototype | 每次调用getbean()时,都返回一个新的实例 |
| request | 每次HTTP请求都会创建一个新的Bean |
| session | 同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean |
| application | 限定一个Bean的作用域为ServletContext的生命周期 |
request session application 这三个作用域都是基于web的Spring WebApplicationContext实现的,只有在web环境下才能使用。
2.1 Singleton
如果Bean的作用域被声明为Singleton,那么在Spring容器中只会创建一个共享的bean实例。对于所有的bean请求,只要id与该bean定义的相匹配,那么Spring在每次需要时都会返回同一个bean实例。
Singleton是单例模型,就是在创建起容器时就同时创建了一个bean对象,Singleton是Spring中的默认作用域,可以scope=(" ")"来设置作用域。
使用场景:通常无状态的Bean使用该作用域。无状态表示Bean对象的属性状态不需要更新。
2.2 prototype
当一个作用域为prototype时,表示一个Bean定义对应多个对象实例。声明为prototype的作用域会导致在每次对该bean请求时都会创建一个新的bean实例。
prototype是原型类型,**它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象。**每次获取到的对象都不是同一个对象。
使用场景:通常是有状态的Bean使用该作用域。
2.3 Request
当HTTP请求调用作用域为request的bean时,每增加一个HTTP请求,Spring就会创建一个新的bean,在请求处理完成后便及时销毁这个bean。
2.4 session
session中所有请求共享同一个请求的bean实例。Session结束后就销毁bean。
2.5 application
Servlet容器为整个Web应用程序开发使用appPreferences bean定义一次来创建AppPreferences bean实例。
application与singleton有一些不同:
- 它是每个ServletContext的单例,而不是每个Spring Application的单例。
- 它是公开的,因此可见为一个ServletContext属性。
三、Bean的生命周期
生命周期是指一个对象从诞生到销毁的整个生命周期。
String Bean的生命周期可以分为以下五个部分:
- 实例化
- 属性赋值
- 初始化
- 使用
- 销毁


- 实例化:第一步,实例化一个bean对象。
- 属性赋值:第二步,为bean设置相关属性和依赖
- 初始化:3,4步在初始化之前执行,5,6步是真正的初始化,第7步在初始化之后执行,初始化完成之后,就可以开始使用bean了
- 销毁:9,10步真正的销毁bean
我们用一个具体的栗子来详解这个过程:
PersonBean的一生:
边栏推荐
- idea按条件断点调试
- Xgen hair guide history cleared solution
- 使用arduino开发esp8266和esp32时首选项设置方法
- 项目代码训练教程
- Leetcode sword finger offer II 041 Average value of sliding window: low space consumption solution
- 如何在 Authing 上快速实现 Zadig 单点登录?
- Junit5
- Stm32subeide (9) -- USART sends and receives via DMA
- Distributed transaction best effort notification scheme
- 46. IO model
猜你喜欢

Eureka self protection

WPF 3D application building (Foundation)

Redis6 new data type - hyperloglog

【C语言-自定义类型】还能这样整?

Redis publishing and subscription

Junit5

Event loop, macro task, micro task

Sorting out of neural network basics exercises in the second week of in-depth study

深度学习之线性回归+基础优化

LeetCode 剑指 Offer II 041. 滑动窗口的平均值:低空间消耗解决
随机推荐
Eureka self protection
How to write a string field in MySQL if its value is not empty?
RestTemplate
Event loop, macro task, micro task
Matlab imports floating-point numbers with more than 9 digits after the decimal point
Li Kou 43 string multiplication note
LeetCode 0115.不同的子序列
RPA相关知识点整理
2022 Guangdong Provincial Safety Officer a certificate, the third batch (main person in charge) exercise questions and mock examination
也挺难的,不光我自己写的很累
Convex mirror 3D glass contour scanning
cut,sort,uniq,xargs
cut,sort,uniq,xargs
New data type of redis bitmaps
WPF 3D application building (Foundation)
深度学习第四周Key Concepts on Deep Neural Networks习题整理
LeetCode 0116. Populate the next right node pointer for each node
QR分解求矩阵逆--c工程实现
Support for multiple devices in (ghost engine)
创建静态库的基本步骤