session作用域_Spring 源码解析 Scopes 之 Request 、Session 、Application

(给ImportNew加星标,提高Java技能)

转自:开源中国,作者:麦克斯

链接:my.oschina.net/wang5v/blog/3017934

Request、Session、Application概念

在这篇Spring源码解析-Singleton Scope(单例)和Prototype Scope(多例)博客中介绍了2个比较常用的scope同时也简单的介绍了本篇博客要讲的这三个不常用的scope的概念,今天来详细揭开这3个很不常用的scope。 这三个只能用于web应用中,即要用于Web的Spring应用上下文(如:XmlWebApplicationContext),如果你用于非web应用中(如ClassPathXmlApplicationContext)是会抛出异常的。

Request Scope

第一个要介绍的就是Request了,顾名思义,如果bean定义了这个scope,标示着这个bean的生命周期就是每个HTTP Request请求级别的,换句话说,在不同的HTTP Request请求中,Request Scope的bean都会根据bean的definition重新实例化并保存到RequestAttribute里面。这也就是说,这个实例只会在一次请求的全过程中有效并可见,当请求结束后,这个bean就会被丢弃,生命周期很短的。又因为每次请求都是独立的,所以你修改Request Scope的bean是只对内部可见,其他的通过相同的bean definition创建的实例是察觉不到的。 怎么去定义Request Scope呢?Spring提供了两种方式: 一种XML方式配置:

"testRequest" class="com.demo.TestRequest" scope="request"/>

另外一种就是注解的方式:

@RequestScope
@Component
public class TestRequest{
// ...
}

这样我们就指定了这个Bean的scope为Request的。但是,Request、Session和Application的用法不只是这样就可以了,后面在应用中会更加详细介绍怎么去用这三个东西。

Session Scope

接下来谈下这个Session Scope,会话级别的。scope指定为Session的bean,Spring容器在单个HTTP会话的生命周期中使用bean定义来创建bean的新实例,也就是说,在每次会话中,Session Bean 会实例化,并保存到RequestAttribute里面,跟Request不同的是,每个会话只会实例化一次,而request是每次请求都会实例化一次。当我们,定义了Session的bean,那么标记着这个bean的生命周期就是在一次完整的会话中,所以在特定的HTTP Session 中bean的内部状态修改了,在另外的HTTP Session 实例中根据一样的bean definition创建的实例是感知不到的。当session结束时,这个bean也会随之丢弃掉。 定义Session Scope也有两种方式: 一种XML方式:

"testRequest" class="com.demo.TestRequest" scope="session"/>

另外一种就是注解的方式:

@SessionScope
@Component
public class TestRequest{
// ...
}

Application Scope

被Application标记的bean指示了Spring容器通过对整个web应用程序一次性使用bean定义来创建bean的新实例。也就是说,Application Scope bean的作用域在ServletContext级别,并存储为一个常规的ServletContext属性里面。这个跟单例有点类似,但是却是不同的,每个ServletContext里是单例,但是对于Spring的每个ApplicationContext就不一定了。 定义Application Scope也有两种方式: 一种XML方式:

"testRequest" class="com.demo.TestRequest" scope="application"/>

另外一种就是注解的方式:

@ApplicationScope
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值