版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.1JavaBean概述
按照Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露,通常称之为属性。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制发现和操作这些JavaBean属性。用户可以使用JavaBcan将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并A其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean,Applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地地复制和粘贴功能,而不用关心任何改变。下一页返回6.1JavaBean概述JavaBean描述了Java的软件组件模型,这个模型被设计成使第二方厂家可以生产和销售能够集成到其他开发厂家或者其他开发人员开发的软件产品的Java组件。应用程序开发者可以从开发厂家购买现成的JavaBean组件,拖放到集成开发环境的I具箱中,再将其应用于应用软件的开发,对于JavaBean组件的属性、行为可以进行必要的修改,测试和修订,而不必重新编写和编译程序。在JavaBean模型中,JavaBean组件可以被修改或者与其他JavaBean组件组合以生成新的JavaBean组件或完整的Java应用程序。上一页下一页返回6.1JavaBean概述Java应用程序在运行时,最终用户也可以通过JavaBean组件设计者或应用程序开发者所建立的属性存取方法(setXXX方法和getXXX方法)修改JavaBean组件的属性,这些属性可能是颜色和形状等简单属性,也可能是影响JavaBcan组件总体行为的复杂属性。一般来说,JavaBcan可以表示为简单的GUI组件,可以是按钮组件、游标和菜单等,这些简单的JavaBean组件提供了告诉用户什么是JavaBcan的直观方法,但也可以编写一些不可见的JavaBean用于接受事件和在幕后工作,例如访问数据库,执行查询操作的JavaBean它们在运行时刻不需要任何可视的界面,在JSP程序中所用的JavaBcan一般以不可见的组件为卞,可见的JavaBean一般用于编写Applet程序或者Java应用程序。上一页返回6.2设置和获取JavaBean属性JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为4类:SimpleIndexBound与Constrained属性。6.2.1Simple属性一个简单属性表示一个伴随有一对get/set方法的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为“X”的属性。如果有一个方法名为isX,则通常暗指+X;是一个布尔属性(即X的值为true或false。下一页返回6.2设置和获取JavaBean属性6.2.2Indexed属性一个Indexed属性表小一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。6.2.3Bound属性一个Bound属性是指当该种属性的值发生变化时,要通知其他的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件。事件中封装了属性名、属性的原值及属性变化后的新值。这种事件是传递到其他的bean,至于接收事件的bean应做什么动作由其自己定义。上一页下一页返回6.2设置和获取JavaBean属性
当PushButton的background属性与Dialog的background属性bind时,若PushButton的background属性发生变化,Dialog的background属性也会发生同样的变化。例:publicclassalden3extendsCanvas{StringourString="Hello";//ourString是个Bound属性privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);/**注:Java是纯面向对象的语言,如果要使用某种方法则必须指明是要使用哪个对象的方法,在下面的程序中要进行点火事件的操作,这种操作所使用的方法是在PropertyChangeSupport类中的。所以上面声明并实例化了一个changes对象,在下面的程序中要进行触发事件的操作,使用changes的firePropertyChange()方法来触发ourString的属性改变事件。*/上一页下一页返回6.2设置和获取JavaBean属性publicvoidsetString(stringnewString){StringoldString=ourstrrng;ourstring=newstrrng;/*ourString的属性值已发生变化,于是接着点火属性改变事件‘/changes.firePropertyChange("ourString",oldString,newString);}publicStringgetString(){returnourStrrnq;}上一页下一页返回6.2设置和获取JavaBean属性/**以下代码是为开发I具所使用的。我们不能预知alden3将与哪些其他的bean组合成为一个应用,尤法预知若alden3的ourString属性发生变化时有哪些其他的组件与此变化有关,因而alden3这个bean要预留出一些接日给开发I具,开发I具使用这些接日,把其他的JavaBean对象与alden3挂接。*/publicvoidaddPropertyChangeListener(PropertyChangeLisenerl){changes.addPropertyChangeListener(1);}publicvoidremovePropertyChangeListener(PropertyChangeListenerl){changes.removePropertyChangeListener(1);}上一页下一页返回6.2设置和获取JavaBean属性
通过上面的代码开发I具调用changes的addPropertyChangeListener()方法把其他JavaBean注册入ourString属性的监听者队列1中,1是一个Vector数组,可存储任何Java对象。开发I具也可使用changes的removePropertyChangeListener()方法,从1中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其他Java对象与alden3挂接。
6.2.4Constrained属性一个JavaBean的Constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其他Java对象可否决属性值的改变。Constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变。上一页下一页返回6.2设置和获取JavaBean属性
例:下面程序中的Constrained属性是PriceInCents。publicclassJellyBeanextendsCanvas{privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);privateVetoableChangeSupportVetos=newVetoableChangeSupport(this);/*与前述changes相同,可使用VetoableChangeSupport对象的实例Vetos中的方法,在特定条件下来阻止PriceInCents值的改变。*/上一页下一页返回6.2设置和获取JavaBean属性publicvoidsetPriceInCents(rntnewPriceInCent幻throwsPropertyVetoExceptron{/*方法名中throwsPropertyVetoException的作用是当有其他Java对象否决PriceInCents的改变时,要抛出异常。*//*先保存原来的属性值*/rntoldPriceInCents=ourPriceInCents;/**点火属性改变否决事件*/vetos.fireVetoableChange("priceInCents”,newInteger(OldPriceInCents,newInteger(newPrrceInCents);上一页下一页返回6.2设置和获取JavaBean属性/**若有其他对象否决pricelnCents的改变,则程序抛出异常,不再继续执行下面的两条语句,方法结束。若尤其他对象否决PriceInCents的改变,则在下面的代码中给ourPricelncents赋予新值,并点火属性改变事件*/ourPrrceInCents=newPrrceInCents;changes.firePropertyChange("priceInCents”,newInteger(oldPriceInCents),newInteger(newPrrceInCent引);}/**与前述changes相同,也要为PriceInCents属性预留接日,使其他对象可注册入PriceInCents否决改变监听者队列中,或把该对象从中注销*/上一页下一页返回6.2设置和获取JavaBean属性publicvoidaddVetoableChangeListener(VetoableChangeListenerl){vetos.addVetoableChangeListener(1);publicvoidremoveVetoableChangeListener(VetoableChangeListenerl){vetos.removeVetoableChangeListener(1);
从上面的例子中可看到,一个Constrained属性有两种监听者:属性变化监听者和否决属性改变的监听者。否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有Constrained属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。上一页下一页返回6.2设置和获取JavaBean属性总之,某个Bean的Constrained属性值可否改变取决于其他的bean或者是Java对象是否允许这种改变。允许与否的条件由其他的bean或Java对象在自己的类中进行定义。上一页返回6.3JavaBean作用域
对于JSP程序而言,使用JavaBean组件不仅可以封装许多信息,而目还可以将一些数据处理的逻辑隐藏到JavaBean的内部,除此之外,还可以设定JavaBean的scope属性,使得JavaBean组件对于不同的任务具有不同的生命周期和不同的使用范围。scope属性具有4个可能的值:applicationsessionrequest和page,分别代表JavaBean的4种不同的生命周期和4种不同的使用范围。bean只有在它定义的范围单才能使用,在它的活动范围外将尤法访问到它。JSP为它设定的范围如下。下一页返回6.3JavaBean作用域(1)page:bean的默认使用范围。
(2)request:作用于任何相同清求的JSP文件中,直到页面执行完毕向客户端发回响应或在此之前已通过某种方式(如贡定向、链接等方式)转到另一个文件为止。还可通过使用Request对象访问bean,如request.getAttribute(beanName)。
(3)session作用于整个session的生存周期内,在session的生存周期内,对此bean属性的任何改动,都会影响到在此session内的另一page,另一request对此bean的调用。但必须在创建此bean的文件单事先用page指令指定了session=true。
(4)application:作用于整个application的生存周期内,在application周期内,对此bean属性的任何改动,都会影响到此application内另一page,另一request以及另一session单对此bean的调用。上一页下一页返回6.3JavaBean作用域
说明:通过对属性的设置,可以得到不同的结果。
(1)当scope=application时,浏览date.jsp,显示出了系统时间。然后不管怎么刷新,重新打开一次浏览器,甚至换台机器,它显示的时间始终不变,都是当初的时间(即bean刚创建时得到的系统时间)。此时只要不重新启动Web服务,输出不会变化。
(2)当scope=session时,浏览date.js
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豆瓣菜基因组de novo组装、注释及比较进化的深度解析与洞察
- 调和分析方法在数学物理方程中的深度剖析与应用拓展
- 课堂场域中学生身体问题审视与教育策略重构
- 2026年西安雁塔雁南小学教师招聘考试模拟试题及答案详解
- 语言背景差异下的英语课堂提问:本族语与非本族语教师的对比剖析
- 语法转喻视角下英语形容词静态谓语祈使构式的深度剖析与认知探究
- 语文学习的重要性、内容体系与教学策略探究
- 语域理论驱动下民办高校大学英语写作教学的创新与实践
- 2026云南昆明市精神病院临床医生、临床护士、康复治疗师招聘3人笔试参考题库及答案详解
- 试验所构建人力资源战略管理体制的深度剖析与优化路径
- 2025-2026学年人教版五年级数学下册全册知识点总结(完整版)
- 2026年高压电工考试科目一试题及答案
- 建筑施工企业人员资格管理制度范本
- 2026年全国高考试卷及答案解析
- 2026年安全生产法律法规知识培训考试试卷及答案
- (五调)武汉市2026届高三年级五月调研考试数学试卷(含答案及解析)
- 2025年5月-2026年4月时事政治要点(7.8.9年级道德与法治考试专用)
- 2026江苏苏州工业园区管理委员会招聘44人笔试模拟试题及答案解析
- 重症医学科(ICU)ARDS患者机械通气护理指南
- 水电工程后评价技术导则(2023版)
- CDO首席数字官面试题(某大型集团公司)试题集解析
评论
0/150
提交评论