Spring的Scope

Posted 哦...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring的Scope相关的知识,希望对你有一定的参考价值。

Scope是什么?
Scope定义我们采用什么模式去创建Bean,比如说默认是单例模式,也会有多实例的方式。

Scope的几种取值
1.singleton
单例模式,也就是容器中只存在一个实例,不管怎么获取Bean都是只存在一个实例。singleton类型的bean定义从容器启动到第一次被请求而实例化开始,只要容器不销毁或退出,该类型的bean的单一实例就会一直存活,典型的单例模式。

实际测试:定义Scope为单例模式(也就是默认模式)

测试的主方法编写:

两个对象是一致的

2.prototype
若使用prototype模式,spring容器每次都会重新生成一个新的Bean实例给请求方。选择该类型的对象的实例化和属性设置都由容器负责,但准备工作完成后,对象实例给到请求方后,容器不再拥有对该对象的引用,拿到该对象实例的这一方需要对该对象实例后续的生命周期负责(比如说销毁)。也就相当于设定了prototype模式后,口香糖(Bean对象)由工厂(容器)生产,生产完后,口香糖后面被拿来干嘛了有没有扔掉都不归工厂管,用户需要对口香糖后面的生命周期负责,也要负责把它丢进垃圾桶(销毁)。

实际测试:

 测试主方法同上个例子

结果:

 多实例的方式每次的对象不一样

3.request
用于WEB应用程序。当使用Spring MVC时,同一次请求创建一个实例,bean在当前请求内有效。当请求结束后,该对象的生命周期即告结束。

4.session
用于WEB应用程序。当使用Spring MVC时,容器会为每个独立的session创建一个bean实例,相较于request模式存活时间更长。当session结束时,bean被销毁。

5.application

将单个 bean 定义的范围限定为 ServletContext 的生命周期。仅在WEB应用程序的Spring ApplicationContext 的上下文中有效。

6. websocket

将单个 bean 定义的范围限定为 WebSocket 的生命周期。仅在 WEB应用程序的Spring ApplicationContext 的上下文中有效。 

另外还可以通过实现Spring的Scope接口创建自定义作用域,这种自定义作用域需要在Spring配置中进行注册。

Scope的配置方式
1.xml

<bean id="xxx" class="xxx" scope="prototype" />
2.注解

 

以上是关于Spring的Scope的主要内容,如果未能解决你的问题,请参考以下文章

Spring - Java EE 用户在身份验证后仍然为空

在 Java Spring 的 REST 方法中返回后执行清理操作

关于java-MyBatis-Spring学后笔记

Java + Spring + Quartz-scheduler:在其他工作结束后解雇一个工作

Spring boot项目启动后出现java.awt.HeadlessException异常

java 8 到 java 11 迁移后使用 postgres db 和 spring boot 保存 JpaSystemException 的 jsonb 类型数据