Spring 入门学习 —— XML 格式文件介绍(十一)(bean 的scope [5])

125 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 作用域类型。这三种类型不是很常用,但是读者也需要熟知这些内容。