Bean的作用域

在Spring中,那些组成应用程序的主体及由Spring IOC容器所管理的对象,被称之为bean。简单地讲,bean就是由IOC容器初始化、装配及管理的对象。而这些对象,都有它对应的作用域。

image-20210119154303431

几种作用域中,request、session作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的Spring ApplicationContext环境。

1、Singleton

当一个bean的作用域为Singleton,那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

Singleton是单例类型,就是在创建容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象

【注意】Singleton作用域是Spring中的缺省作用域。在我们不声明的情况下,默认就是Singleton

我们也可以在

<bean id="user" scope="singleton"/>

Singleton的作用范围:

singleton

2、Prototype

当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。

Prototype是原型类型,它在我们创建容器的时候没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象

有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

<bean id="user" scope="prototype" />

prototype的作用范围:

prototype

3、Request

当一个bean的作用域为Request,表示在一次HTTP请求中,一个bean定义对应一个实例

即每一个HTTP请求,都会单独创建一个bean,若请求结束,bean也会随之销毁。

使用request作用域一般不会存在线程安全问题,因为在Web应用中,每个请求都是由一个单独的线程进行处理,所有线程之间并不会共享bean,从而不会存在线程安全的问题。

如果使用的是注解扫描配置bean,那么在bean所属的类上使用@RequestScope注解即可使用此作用域,若是基于文件,则通过beanscope配置项:

<bean id="loginAction" scope="request"/>

4、Session

Session作用域将bean的使用范围一次在一次http会话中,对于每一个会话,Spring容器都会创建一个单独的bean,若Session被销毁,则bean也随之销毁。

针对某个HTTP Session,Spring容器会根据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。

与request作用域一样,可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。

session作用域只能使用在Web应用中。我们可以使用@SessionScope将bean指定为session作用域,也可以使用

<bean id="userPreferences" scope="session"/>

5、Application

Spring 容器通过为整个 Web 应用程序使用一次 bean 定义来创建 bean 的新实例。也就是说,bean 在级别上进行范围范围存储,并存储为常规属性。

这与 Spring Singleton Bean有些类似,但在两个重要方面有所不同:它是每个的单元,而不是每个 Spring"应用程序上下文"(对于它,在任何给定的 Web 应用程序中可能有多个),它实际上是公开的,因此作为属性可见。‎

application作用域也只能用于web应用中。使用方式和之前几种类似,可以通过@ApplicationScope注解,也可以使用配置文件:

<bean id="appPreferences" scope="application"/>

6、websocket

websocket是一种应用层的通信协议,它提供应用层的全双工通信,而Spring提供对websocket协议的支持,于是就有了这么一个作用域。在Spring官方文档中,并没有对这个作用域进行详细描述,但是我们也可以通过名称推断出来。

若一个bean的作用域为websocket,则只作用于一次websocket通信。若连接被释放,则bean也会被销毁。









原文转载:http://www.shaoqun.com/a/512558.html

跨境电商:https://www.ikjzd.com/

上海跨境通:https://www.ikjzd.com/w/1329

outfit:https://www.ikjzd.com/w/938


在Spring中,那些组成应用程序的主体及由SpringIOC容器所管理的对象,被称之为bean。简单地讲,bean就是由IOC容器初始化、装配及管理的对象。而这些对象,都有它对应的作用域。几种作用域中,request、session作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的SpringApplicationContext环境。1、Single
auditor:auditor
tinypic:tinypic
亚马逊节日日历--英文版:亚马逊节日日历--英文版
疫情期间各大平台蓬勃发展,亚马逊电商龙头地位不保?!:疫情期间各大平台蓬勃发展,亚马逊电商龙头地位不保?!
2019最新亚马逊Listing优化:2019最新亚马逊Listing优化

Comments

Popular posts from this blog

指纹浏览器定制开发全面助力企业安全与智能升级

跨境电商资讯:一文带你走进亚马逊19大海

利用 Google 购物广告促进销量的初学者指南