理解作用域和受管Bean

您在本教程中所创建的 Web 应用程序采用 application 范围内的一个对象来统计投票数,采用 session 范围内的一个对象来确保用户在每个会话中只能投票一次。该应用程序采用一个 request 范围内的对象来显示用户提交投票的时间。该时间存储在 request 范围,因为应用程序在响应被发送到客户端浏览器以后不再需要这个值。

本教程需要采用以下技术及资源

JavaServer Faces 组件/

Java EE 平台

1.2 和 Java EE 5*

1.1 和 J2EE 1.4

Travel 数据库 非必须

* 为了利用 NetBeans IDE 6.0 的 Java EE 5 能力,请采用一个完全符合 Java EE 5 规范的应用程序服务器,如 Sun Java Application Server 9/GlassFish 。

此教程已针对 GlassFish v2 应用程序服务器上的应用做出调整。如果您使用的是不同的服务器,请参阅发行说明及常见问题解答以了解已知问题和变通方法。要了解受支持的服务器和 Java EE 平台的信息,请参阅发行说明。

关于作用域

当用户停留在一个页面上的时候,即使页面重新显示,例如用户点击一个返回空值的按钮时,组件的值仍然被存储。然而,用户离开这个页面时,组件的值随即消失。

要让值对其他页面有效,或者对用户应当返回的相同页面有效,你需要存储值。当你从 IDE 里创建一个项目时, IDE 将创建三个 受管 Bean 用来存储值:

RequestBean1

SessionBean1

ApplicationBean1

下图所示的是一个列出了受管 Bean 的“导航”窗口。

图表 1:默认的受管 Bean

一个受管 Bean 就是一个 JavaBean 对象,该对象被 JavaServer Faces web 应用程序所呈现并存储于request、session 或者 application 范围内。Web 应用程序将 RequestBean1 存储于 request 范围内,将 SessionBean1 存储于 session 范围内,并将 ApplicationBean1 存储于 application 范围内。

要向这些受管 Bean 添加属性,您可以右击“导航”窗体中的一个 bean 并在源代码中键入属性声明。右击 Java 编辑器中的任意处,然后选择“重构” > “封装字段”。然后从列表中选择属性并勾选要添加的方法,点击“构造”。

在创建一个 bean 属性来存储值之前,您必须决定属性值的适用作用域。因为许多用户可能在同一时间访问 web 应用程序,您需要使用尽可能最小的作用域以便对服务器资源进行最好的利用。下图展示了每种作用域的持续期。

Application 作用域将持续到服务器停止该应用程序为止。您存储在 application bean 中的值对于使用同一应用程序映射的每个会话和每个请求都是有效的。

Session 作用域在用户第一次访问 web 应用程序中的某一页面时开始,当用户的会话由于长时间处于非活动状态而超时,或者当 web 应用程序令会话无效时,例如通过调用 session.invalidate(),会话终止。

Request 作用域在用户提交页面时开始,当响应彻底完成时终止,不论返回的页面是什么。

图表 2: Web 应用程序的作用域

时间: 2024-08-03 21:05:24

理解作用域和受管Bean的相关文章

Spring受管Bean的与处理和后处理 三

使用标签的init-method和destroy-method属性 在<bean> 标签中,有init-method和destroy-method属性,通过设置这两个属性的值,可以很 方便的指定该受管Bean的缺省的初始化方法和析构方法. 要给应用中每个Bean都指定init-method和destroy-method属性,那将是一个麻烦的工作,要简化配置 ,可以通过<beans>标签的default-init-method和default-destroy-method属性来为其范

Spring受管Bean的预处理和后处理 二

使用回调接口对受管Bean进行与处理和后处理 1.初始化回调接口InitializingBean 要对某个受管Bean进行预处理里时,可以实现Spring定义的 初始化回调接口InitializingBean,它定义了一个方法如下: 1 void afterPropertiesSet() throws Exception 开发者可以在受管Bean中实现该接口,再在此方法中对受管Bean进行预处理. 注意:应该尽量避免使用这种方法,因为这种方法会将代码与Spring耦合起来.推荐使用下面的使用 i

Spring受管Bean的与处理和后处理 一

使用BeanPostProcessor接口对受管Bean进行预处理 有时候,我们希望在Spring IoC容器初始化受管Bean之前.属性设置之后对该Bean先做一些预处理, 或者在容器销毁受管Bean之前自己释放资源.那么该如何实现呢?Spring IoC为我们提供了多种方法来实 现受管Bean的预处理和后处理. 在Spring中定义了BeanPostProcessors接口,代码如下: package org.springframework.beans.factory.config; imp

你必须知道的Javascript知识点之&amp;quot;深入理解作用域链&amp;quot;的介绍_javascript技巧

示例代码: 复制代码 代码如下: var xxxVar1 = 1; var outer = function(){     var xxxVar2 = 2;     var results = [];     for(var i = 0; i< 3; i++)    {       var inner = function(){          var xxxVar3 = 3;          return xxxVar3 + xxxVar2 +xxxVar1 + i;       }   

Spring容器中Bean的作用域

    当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例 prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例 request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次

Spring2.x中设置Bean的作用域

在配置文件里声明的Bean时,实际定义的并不是一个Bean实例,而是为Bean创建了一个模板,当通过getBean()调用或其他请求改Bean的时候,Spring将根据Bean的实际作用域返回Bean的实例,在某些情况下默认的作用域并不适合,此时需要为Bean设置一个更适合的作用域. 在Spring2.x里,可以通过<bean>中的scope属性设置作用域,默认情况下Spring只为在Ioc容器里声明的Bean创建一个实例,整个Ioc范围内都共享这个实例,所有后续的getBean()调用和引用

想讨论一下.struts+spring+hibernate的bean的作用域问题,也就是&amp;amp;lt;bean

问题描述 想讨论一下.struts+spring+hibernate的bean的作用域问题,也就是<bean scope="">的设置从表示层开始:1.Struts Action对应的bean作用域2.业务层的Service类的bean作用域3.数据存储层的DAO类的bean作用域4.实体层的Bean的作用域. 解决方案 1.Struts Action对应的bean作用域 scope=prototype2.业务层的Service类的bean作用域 scope=prototy

js作用域及作用域链概念理解及使用_基础知识

(1)作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域. 1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用域(function scope),属于局部变量 局部变量优先级高于全局变量 var name="one"; function test(){ var name="two"; console.log

Spring bean的作用域Scope

1.bean的常用配置项:(理论上只有class是必须的) id:唯一标识 class:具体是哪一个类 scope:范围 constructor arguments:构造器的参数 properties:属性 Autowiring mode:自动装配模式 lazy-initialization mode:懒加载模式 initialization/destruction method:初始化/销毁的方法 2.bean的作用域 singletion 单例 bean容器只有唯一的对象(默认模式) pro