JavaBean简单介绍及其应用

  • 格式:pdf
  • 大小:172.37 KB
  • 文档页数:5

JavaBean简单介绍及其应⽤

Bean的中⽂含义是“⾖⼦”,顾名思义JavaBean是⼀段Java⼩程序。JavaBean实际上是指⼀种特殊的Java类。它通经常使⽤来实现⼀些⽐較经常使⽤的简单功能。并能够⾮常easy的被重⽤或者是插⼊其它应⽤程序中去。全部遵循⼀定编程原则的Java类都能够被称作JavaBean。

⼀. Java Bean技术概述

Java Bean是基于Java的组件模型,由属性、⽅法和事件3部分组成。在该模型中,JavaBean能够被改动或与其它组件结合以⽣成新组件或完整的程序。它是⼀种Java类,通过封装成为具有某种功能或者处理某个业务的对象。

因此。也能够通过嵌在JSP页⾯内的Java代码訪问Bean及其属性。 Bean的含义是可反复使⽤的Java组件。

所谓组件就是⼀个由能够⾃⾏进⾏内部管理的⼀个或⼏个类所组成、外界不了解其内部信息和执⾏⽅式的群体。使⽤它的对象仅仅能通过接⼝来操作。 ⼆. Java Bean编写规范

Java Bean实际上是依据JavaBean技术标准所指定Bean的命名和设计规范编写的Java类。

这些类遵循⼀个接⼝格式。以便于使函数命名、底层⾏为以及继承或实现的⾏为,其最⼤的长处在于可以实现代码的可重⽤性。Bean并不须要继承特别的基类(BaseClass)或实现特定的接⼝(Interface)。Bean的编写规范使Bean的容器(Container)可以分析⼀个Java类⽂件。并将其⽅法(Methods)翻译成属性(Properties),即把Java类作为⼀个Bean类使⽤。Bean的编写规范包含Bean类的构造⽅法、定义属性和訪问⽅法编写规则。

2.1. Bean组件的⼯作机制

在JavaBeansVersion1.01 A规范中定义了该组件的5种重要机制:

(1)内省(Introspection):组建能够发表其⽀持的操作和属性。同⼀时候也⽀持在其它组件中发现反复利⽤的对象库,如⽤户权限控制和电⼦邮件⾃⼰主动回复等。

(2)通信(Communication):⽣成和收集组件的消息事件。

(3)持续(Persistence):存放组件的状态。

(4)属性(Properties):⽀持组件布局的控制,包含组件占⽤的空间和组件的相对位置。

(5)定制(Customization):开发⼈员可控制组件所需的改变机制。

2.2. Java Bean的编写要求

编写JavaBean必须满⾜下⾯⼏点要求:

(1)全部的JavaBean必须放在⼀个包(Package)中。

(2)JavaBean必须⽣成public class类,⽂件名应该与类名称⼀致。

(3)全部属性必须封装,⼀个JavaBean类不应有公共实例变量,类变量都为private。

(4)属性值应该通过⼀组存取⽅法(getXxx 和 setXxx)来訪问:对于每⼀个属性。应该有⼀个带匹配公⽤getter 和 setter⽅法的专⽤实例变量。

(5)Java Bean 类必须有⼀个空的构造函数:类中必须有⼀个不带參数的公⽤构造器。此构造器也应该通过调⽤各个属性的设置⽅法来设置属性的默认值。

2.3. Java Bean的命名规范

Java Bean的命名规范例如以下:

(1)包命名:所有字母⼩写。(2)类命名:每⼀个单词⾸字母⼤写。

(3)属性名:第⼀个单词所有⼩写,之后每⼀个单词⾸字母⼤写。

(4)⽅法名:与属性命名⽅法同样。

(5)常量名:所有字母⼤写。

2.4. Java Bean的包

包即package。JavaBean的包和前⾯章节中介绍的包括义基本上是⼀样的,可是也有差别,前⾯介绍的包都是Java本⾝定义的,⽽JavaBean的包是⽤户⾃定义的。

每个JavaBean源⽂件被编译成.class⽂件后。都必须存放在对应的⽂件夹下,存放这个.class⽂件的⽂件夹就是⼀个包。

JavaBean的包必须存放在特定的⽂件夹下,在每个JSP引擎中都规定了存放JavaBean包的位置。不同的JSP引擎对JavaBean存放的位置有不同的规定,如在Tomcat中。JavaBean的全部包都存放在WEB-INF/classes⽂件夹中。假设存在多级⽂件夹。则须要将.class⽂件所在⽂件夹的全部上级⽂件夹包括到包名称中,每⼀级⽂件夹之间⽤英⽂标点“.”隔开。

⽐如以下代码:packagejsp.example.mybean。

2.5. Java Bean的结构

(1)属性:即Java Bean类的成员变量。⽤于描写叙述JavaBean对象的状态。对象属性值的改变触发事件。属性本⾝就是事件源。

(2)⽅法:在Java Bean中。函数和过程统称为⽅法。通过⽅法来改变和获取属性的值。

⽅法能够分为构造⽅法、訪问⽅法和普通⽅法等。

(3)事件:事件实际上是⼀种特殊的Java Bean,属性值的改变触发事件,事件激发相关对象作出反应,通过Java Bean注冊对象事件监听者机制来接收、处理事件。它实现了Java Bean之间的通信。

三. Java Bean属性

在上⼀节中我们简单提到了JavaBean的属性,Java Bean的属性与⼀般Java程序中所指的属性,或者说与全部⾯向对象的程序设计语⾔中对象的属性是⼀个概念。在程序中的具体体现就是类中的变量。

属性分为四类,即单值(Simple)、索引(Index)、关联(Bound)和约束(Constrained)属性。本节将对这些属性进⾏具体说明。

3.1. 单值(simple)属性

单值(Simple)属性是最普通的属性类型。该类属性仅仅有⼀个单⼀的数据值,该数据值的数据类型能够是Java中的随意数据类型,包含类和接⼝等类型。 定义了属性,还需定义相应的訪问⽅法,⼀般每⼀个单值属性都伴随有⼀对get/set⽅法。属性名与和该属性相关的get/set⽅法名相应。⽐如假设有⼀个名为“xxx”的属性。则会有setXxx和getXxx⽅法。 另外。布尔(Boolean)属性是⼀种特殊的单值属性。它仅仅有两个同意值:true和false,假设有⼀个名为“xxx”的布尔属性,则能够通过isX⽅法訪问。

3.2. 索引(Indexed)属性

假设须要定义⼀批同类型的属性。使⽤单值属性就会显得很烦琐,为解决此问题,JavaBean中提供了索引(Indexed) 属性,索引属性是指JavaBean中数组类型的成员变量。

使⽤与该属性相应的set/get⽅法可取得数组的值。索引属性通过相应的訪问⽅法设置或取得该属性中某个元素的值。也能够⼀次设置或取得整个属性的值。

3.3. 关联(Bound)属性

关联(Bound)属性是指当该种属性的值发⽣变化时。要通知其它的对象。每次属性值改变时。这样的属性就触发⼀个PropertyChange事件(在Java程序中,事件也是⼀个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这样的事件传递到其它的Beans,⾄于接收事件的Beans应做什么动作。由其⾃定义。 属性的改变称为JavaBean事件。外部与Java Bean这些事件相关的类对象称为监听者(Listener)。

监听者可能仅仅对JavaBean某⼀属性相关的事件有兴趣,也可能对全部属性相关的事件有兴趣。因此JavaBean提供两类事件监听者注冊和注销的⽅法,即全局事件监听者注冊、注销的⽅法和⼀般事件监听者注冊、注销的⽅法。

3.4. 约束(Constrained)属性

Java Bean的属性假设改变时,相关的外部类对象⾸先要检查这个属性改变的合理性再决定是否接受这种改变。这种JavaBean属性叫约束(Constrained)属性。当约束属性的改变被拒绝时,改变约束属性的⽅法产⽣⼀个约束属性改变异常(PropertyVetoException),通过这个异常处理,JavaBean约束属性还原回原来的值。并为这个还原操作发送⼀个新的属性改动通知。 约束属性的改变可能会被拒绝,因此它的setXxx与⼀般其它JavaBean属性的setXxx也有所不同。约束属性的写⽅法例如以下:

public void setXxx(xxxType newXxx)throws PropertyVetoException

四. Java Bean⽅法

4.1. 构造⽅法

Java Bean的构造⽅法与与之前的普通java类的构造⽅法意思是⼀样的。就是对JavaBean的属性及其⽅法进⾏初始化,即对所定义的属性及⽅法设⼀个初始值,构造⽅法名要和JavaBean的类名同样。

4.2. 訪问⽅法

在定义了Bean的属性,并通过构造⽅法将其初始化后,要让其它程序訪问Bean的这些属性。就必须为其创建訪问⽅法。

訪问⽅法就是对组件中定义的属性的訪问,包含读和写两种訪问⽅式。

读就是⼀种⽤于取出Bean属性的值的取值函数,即getter;⽽写则是⼀种⽤于设置Bean属性的赋值函数。即setter。下⾯列出的就是Bean属性訪问⽅法的详细语法格式: public void setPropertyName(PropertyTypevalue);//给属性赋值。即写⽅法

public PropertyType getPropertyName();//读取属性值,即读⽅法

4.3. ⼀般⽅法

除了对属性的訪问⽅法外。还能够在Bean创建⼀般⽅法来实现对函数的调⽤。仅仅要将Bean中的⼀般⽅法定义成公有的⽅法,就能够供其它程序调⽤。

五. Java Bean事件

事件处理是JavaBeans体系结构的核⼼之中的⼀个。通过事件处理机制。可让⼀些组件作为事件源,发出可被描写叙述环境或其它组件接收的事件。

这样。不同的组件就可在构造⼯具内组合在⼀起。组件之间通过事件的传递进⾏通信,构成⼀个应⽤。

从概念上讲,事件是⼀种在“源对象”和“监听者对象”之间某种状态发⽣变化的传递机制。事件有很多不同的⽤途,⽐如在Windows系统中常要处理的⿏标事件、窗体边界改变事件、键盘事件等。

5.1. 事件模型

Java Bean事件模型如图所看到的。事件源是⼀个JavaBean类对象,它把属性改变的时间对象传递给事件监听者,事件监听者负责事件的处理。事件监听者必须在事件源注冊。

5.2. 事件状态对象

与事件发⽣有关的状态信息⼀般都封装在事件状态对象 (EventState Object) 中,这样的对象是java.util.EventObject的⼦类。

按设计习惯,这样的事件状态对象类的名应以Event结尾。⽐如代码是⼀个⿏标移动事件实例。

5.3. 事件监听者接⼝与事件监听者

因为Java事件模型是基于⽅法调⽤的。因此须要⼀个定义并组织事件操纵⽅法的⽅式。

JavaBeans中。事件操纵⽅法都被定义在继承了java.util.EventListener类的事件监听者(EventListener)接⼝中,按规定,EventListener接⼝的命名要以Listener结尾。不论什么⼀个类假设想操纵在EventListener接⼝中。定义的⽅法都必须以实现这个接⼝⽅式进⾏。这个类就是事件监听者。⽐如例如以下代码://先定义了⼀个⿏标移动事件对象