【Spring学习18】bean作用域:Web作用域及配置
来源:互联网 发布:周易取名 知乎 编辑:程序博客网 时间:2024/05/21 15:01
上篇提到常用的Web作用域有:Request, session, globalSession(portlet容器上使用)
Web作用域介绍
一、Request
对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,每个HTTP request中的实例都是独立互不影响的的。
比如下面bean定义:
<bean id="userrole" class="twm.demo.UserRole" scope="request" />
针对每次HTTP请求,Spring容器会创建一个全新的twm.demo.UserRole bean实例userrole bean, 且userrole bean仅在当前HTTP request内有效。
因此当request A请求创建并更改了userrole bean的内部状态,request B请求中创建的userrole bean,并不会有相应的这些状态变化。
当处理请求结束,request作用域的bean实例将被销毁。
二、Session
和Request很类似,对于每个HTTP Session,使用session定义的Bean都将产生一个新实例。每个HTTP Session中的实例都是独立互不影响的的。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
这里重点要明白request 作用域 和session作用域的差别:
一个http session中可以有多个request
简单说就是,用户A访问同一网站的PageA和PageB,这就有两个http request,但是只有一个http session
用户A,B,C三人同时访问这个网站的PageA,这就有三个http request,同时也有三个 http session
三、globalSession
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。
以上web作用域只有在spring web ApplicationContext的实现中(比如XmlWebApplicationContext)才会起作用,若在常规Spring IoC容器中使用,比如ClassPathXmlApplicationContext中,就会收到一个异常IllegalStateException来告诉你不能识别的bean作用域
初始化web配置
为了支持request,sesssion,global session这种级别bean的作用域(web作用域bean),在定义bean之前需要一些初始化的小配置。
目的是为了使Spring捕获到相应的事件(如request请求开始,request请求结束,session会话开始,sesssion会话结束等。)
这里分两种情况:
1、 SpringMVC:
若使用 SpringMVC访问这些作用域bean,实际上是使用Srping DispatcherServlet类或者DispatcherPortlet类处理request,则无需特别配置。因为DispatcherServlet 和 DispatcherPortlet已经暴露了所有的相关状态。
2、非Spring的DispacherServlet
若使用了非Spring的DispacherServlet处理请求,比如Struts,则需要注册:
2.1、Servlet 2.4及以上的web容器,需要在web.xml中增加监听器:
<web-app> ... <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> ...</web-app>
2.2、Servlet2.4以前的web容器,在web.xml中增加过滤器:
<web-app> .. <filter> <filter-name>requestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> </filter> <filter-mapping> <filter-name>requestContextFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ...</web-app>
DispatcherServlet,RequestContextListener,RequestContextFilter都是做相同的事儿,也就是绑定HTTPrequest对象到服务的Thread线程中,并开启接下来 用到的session-scoped功能。
- 【Spring学习18】bean作用域:Web作用域及配置
- Spring学习笔记(5.Spring Bean装配之Bean的配置项及作用域)
- spring配置bean作用域
- Spring学习,bean作用域
- Spring Bean的配置项及作用域
- Spring bean 作用域
- spring bean作用域
- Spring bean作用域
- spring bean 作用域
- Spring - Bean作用域
- Spring bean作用域
- spring bean作用域
- Spring bean作用域
- Spring bean作用域
- Spring bean 作用域
- spring bean作用域
- spring-bean作用域
- Spring bean 作用域
- jQuery做二级菜单动画
- 设计模式(二)观察者模式
- poj2699枚举+网络流
- leetcode136. Single Number
- document.documentElement.与document.body区别
- 【Spring学习18】bean作用域:Web作用域及配置
- linux初学 unit7
- POJ 1065-Wooden Sticks [dp+Dilworth定理] 《挑战程序设计竞赛》2.3
- 笔记
- java 编辑器eclipse 导入jar 包
- GTX1080+Ubuntu16.04+Cuda8.0+Anaconda2+Opencv3+Matlab2014a
- 一个页面上显示ViewPager的多个item问题
- Linux 信号应用之黑匣子程序设计
- 《递归递推练习》N