携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
上一篇文章介绍的是Spring 容器的prototype 类型作用域,这篇文章我们介绍其他的作用域类型。
request / session / global session
我们之前的文章提到过,这三种类型是类spring 2.0 之后引入的,同时它们只适用于web 应用程序中。
这三种类型不像之前介绍的singleton 及prototype 那么“常用、通用”,它们在xml 文件中通常配合XmlWebApplicationContext 使用,在这里简单地说明一下。
request
假如我们有这样一个请求处理类,声明它的作用域为reqeust:
<bean id = "reqeustHandler" class = "xxxx" scope = "reqeust"/>
在XmlWebApplicationContext 容器(Spring 容器的一种实现)中,它会为每一个Http ReqeustHandler 对象来为当前请求提供使用。在请求结束之后,这个对象实例的声明周期就立刻结束。
那么当有n 个Http 请求同时来访问,容器就会分别对这n 个请求创建n 个ReqeustHandler 实例,它们之间互不影响。
我们可以发现,reqeust 作用域就好比prototype 类型作用域,它们功能很像,但是赋予了不同的场景语义。
session
对于session 我们一定不陌生,它通常是用来存放用户的登录信息这些相关的内容。
这种存放到session 中的信息,我们可以将其scope 指定为session,于是Spring 容器就会给每个独立的session 创建属于其自身的全新的对象实例。这个看起来和reqeust 很相似。区别就是request 作用域对应的bean 的生命周期和每次请求相关;而session 作用域对应的bean 的生命周期和session 相关。
即session 类型的的bean 实例可能会比reqeust 类型的bean 实例存活更长的时间。
global session
它用的很少,它只有应用于基于portlet 的web 应用程序中才有意义,否则就和session 类型没区别。
总结
这篇文章讲了余下的几种scope 作用域类型。这三种类型不是很常用,但是读者也需要熟知这些内容。