JavaBeans组件模型概念学习

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1Java程序设计湖南人文科学院计算机科学技术系2007年上学期主讲:郭广军Tel:13873881089Tel:13873881089EE--mail:mail:gjguohn@sina.comgjguohn@sina.comQQ:583918730QQ:5839187302第14章JavaBeans组件模型333主要内容14.1软件组件模型14.2JavaBean概述14.3JavaBeans的特性14.4JavaBeans的属性14.5API支持14.6JavaBeans的事件处理14.7开发一个JavaBean并打包44414.1软件组件模型„软件组件是分离的、可重用的软件部分,可以方便的将其装配以创建各种应用程序,提高了开发效率。„JavaBeans技术是一种跨体系结构和平台的API,用于创建动态Java软件组件。„软件组件大致可以分为两类:„可视化软件组件„非可视化软件组件555组件模型还负责提供下列服务„自检;„事件处理;„持久化;„布局;„应用程序生成器支持;666主要内容14.1软件组件模型14.2JavaBean概述14.3JavaBeans的特性14.4JavaBeans的属性14.5API支持14.6JavaBeans的事件处理14.7开发一个JavaBean并打包77714.2JavaBean概述„JavaBean是可以复用的平台中立的软件组件,是一组用于构建可重用组件的Java类库。可以将一组JavaBean装配成应用程序或Applet„一个JavaBean由三部分组成:属性、方法和事件外部应用程序或者JavaBean属性accessor方法public方法private方法事件响应图14-1JavaBean的结构888JavaBeans的属性„JavaBean的属性,通常是组件对象中的私有数据成员,外界不能够直接访问,需要通过专门的访问(accessor)方法才能访问„负责读取的accessor方法称为getter方法,负责写入的accessor方法称为setter方法。„publicStringgetName();„publicvoidsetName(Stringvalue);999主要内容14.1软件组件模型14.2JavaBean概述14.3JavaBeans的特性14.4JavaBeans的属性14.5API支持14.6JavaBeans的事件处理14.7开发一个JavaBean并打包10101014.3JavaBeans的特性1.内省(Introspection)„是组件可以向外界暴露其支持的方法,事件和属性的机制,也是支持在程序构建工具中发现其方法、事件和属性的机制。„组件模型通过两种方式支持内省:„1)命名模式(DesignPattern),在对Bean的属性,事件,方法等特性命名的时候遵循一定的设计模式,这样,依赖于Java的反射API中的Introspector类就能够识别出Bean的特性。„2)BeanInfo类,是一个实现了接口BeanInfo的类,在其中列出了Bean向外界暴露的方法,属性和事件。111111JavaBeans的特性22.属性(Properties)„Bean的内部状态、外观和行为特征,在设计时可以改变。程序设计工具可以通过Bean的内省机制来发现。3.定制(Customization)„Bean通过发布其属性使其可以在设计时被定制。有两种方式实现定制:属性编辑器和Bean定制器。4.通信(Communication)„Beans之间通过事件进行交互,一个Bean通过向另一个Bean注册,能够接受它感兴趣的事件。程序构建工具可以检测到一个Bean可以接受和发送的事件。5.持续(Persistence)„使Bean可以存储和恢复其状态。一个Bean的属性被修改后,能够通过对象的持续化机制保存下来,并可以在需要的时候恢复。121212主要内容14.1软件组件模型14.2JavaBean概述14.3JavaBeans的特性14.4JavaBeans的属性14.5API支持14.6JavaBeans的事件处理14.7开发一个JavaBean并打包131313JavaBeans的属性„属性的类型分为„简单„索引„绑定„限制属性。„一个属性可以属于多个类型,例如,限制属性还应为绑定属性。141414(1)简单属性„简单属性是指对象内部的简单变量,它表示一个单独的值,并且通过getter方法和setter方法的组合进行读取和设置。„用于访问简单属性的命名模式如下:„publicTgetN();„publicvoidsetN(Tvalue);„其中,T是属性的类型,N是属性的名称。如下面的代码:„publicStringgetName();„publicvoidsetName(Strings)151515(2)索引属性„索引属性是用于处理数组及其单个元素的属性,它包含类型相同的元素。可通过整型下标访问这些元素,因此它们成为索引属性。„publicTgetN(intindex);„publicT[]getN();„publicvoidsetN(intindex,Tvalue);„publicvoidsetN(Tvalues[]);161616(3)绑定属性„绑定属性是在被修改时向其它对象提供通知的属性。绑定属性需要向Bean注册外部监听器,一旦修改绑定属性的值,监听器就会得到通知。„具有绑定属性的Bean应支持事件监听器的注册方法,注册监听器的方法采用实现PropertyChangeListener接口的对象作为其唯一参数。„publicvoidaddPropertyChangeListener(PropertyChangeListenerl)„publicvoidremovePropertyChangeListener(PropertyChangeListenerl)171717(3)绑定属性Bean绑定属性PropertyChangeEventPropertyChangeListenerpropertyChange()注册图14-2绑定属性的工作原理具体见程序181818(4)限制属性1„限制属性与绑定属性类似,它们在被修改时都会发出通知。但是与绑定属性不同的是,注册为限制属性监听器的对象可以否决属性的修改。通常限制属性还应为绑定属性。„在修改限制属性的值之前,用户必须通过外部监听器检查此值,可以接受或拒绝修改。如果拒绝属性值的修改,则抛出PropertyVetoException异常,包含此属性的Bean将处理异常。任何时候出现异常,Bean都必须将属性的值返回到其原始值;如果没有异常,可为此属性发布属性修改通知。191919(4)限制属性2„限制属性的setter方法应支持PropertyVetoException异常。假设有一个限制属性weight,其accessor方法声明如下:„publicintgetWeight();„publicvoidsetWeight(intweight)throwsjava.beans.PropertyVetoException202020(4)限制属性3„将限制属性连接至监听器的方法与绑定属性类似。具有限制属性的Bean必须支持对事件监听器的注册方法,这些方法将VetoableChangeListener对象作为其唯一参数。„publicsynchronizedvoidaddVetoableChangeListener(VetoableChangeListenerl);„publicsynchronizedvoidremoveVetoableChangeListener(VetoableChangeListenerl);212121(4)限制属性4Bean限制属性PropertyChangeEventVetoableChangeListenervetoableChange()注册图14-3限制属性的工作原理见程序222222主要内容14.1软件组件模型14.2JavaBean概述14.3JavaBeans的特性14.4JavaBeans的属性14.5API支持14.6JavaBeans的事件处理14.7开发一个JavaBean并打包23232314.5API支持„JavaBean的API主要是包java.beans中的一些类和接口,可以分为三组:„功能类:Beans,PropertyChangeEvent,PropertyEditorManager,Introspector等;„描述类:所有的以Descriptor结尾的类。„支持类:PropertyChangeSupport,VetoableChangeSupport,PropertyEditorSupport,SimpleBeanInfo等。242424PropertyChangeEvent„publicPropertyChangeEvent(Objectsource,StringpropertyName,ObjectoldValue,ObjectnewValue)„它的参数为:„source,事件源,激发事件的Bean;„propertyName,表示修改的属性名称;„oldValue,表示属性的旧值;„newValue,表示属性的新值;„任何时候Bean的绑定属性的修改,都将通过调用方法propertyChange()将PropertyChangeEvent类的实例发送至监听器252525PropertyChangeSupport„Bean体系结构提供了PropertyChangeSupport类,简化了属性修改事件的激发。要向多个独立的监听器激发事件,只需创建PropertyChangeSupport对象。它的构造函数如下:„publicPropertyChangeSupport(ObjectsrcBean)„firePropertyChange(PropertyChangeEventevt)„addPropertyChangeListener(PropertyChangeListenerlistener)„removePropertyChangeListener(PropertyChangeListenerlistener)262626PropertyChangeListener„ProperyChangeListener是一个接口。作为绑定属性变化的监听器必须实现此接口。它先向Bean注册,此后对Bean属性的任何修改都将调用监听器的propertyChange()方法,此方法是该接口唯一的方法,定义如下:„propertyChange(PropertyChangeEventevt)272727PropertyVetoException„任何否决性监听器否决Bean属性的修改,都将抛出PropertyVetoException。它的构造函数如下:„PropertyVetoException(Stringmsg,PropertyChangeEventevt)„此构造函数有两个参数:„msg,不接受Bean属性修改的原因„evt,表示属性修改事件„该类中唯一的方法是getPropertyChangeEvent(),它返回被否决的属性修改事件282828VetoableChangeSupport„提供方法向多个监听器激发事件。它的构造函数如下:„publicVetoableChangeSupport(ObjectsourceBean)„addVetoableChangeListener(VetoableChangeListenerlistener)„fireVetoableChange(PropertyChangeEventevt)throwsPropertyVetoException„removeVetoableChangeListener(VetoableChangeListenerlistener)292929VetoableChangeListene

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功