Java Bean 简单介绍及其应用
Bean的中文含义是“豆子”,顾名思义JavaBean是一段Java小程序。JavaBean实际上是指一种特殊的Java类。它通经常使用来实现一些比較经常使用的简单功能。并能够非常easy的被重用或者是插入其它应用程序中去。全部遵循一定编程原则的Java类都能够被称作JavaBean。
Java Bean是基于Java的组件模型,由属性、方法和事件3部分组成。在该模型中,JavaBean能够被改动或与其它组件结合以生成新组件或完整的程序。它是一种Java类,通过封装成为具有某种功能或者处理某个业务的对象。
因此。也能够通过嵌在JSP页面内的Java代码訪问Bean及其属性。
Bean的含义是可反复使用的Java组件。
所谓组件就是一个由能够自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和执行方式的群体。使用它的对象仅仅能通过接口来操作。
Java Bean实际上是依据JavaBean技术标准所指定Bean的命名和设计规范编写的Java类。
这些类遵循一个接口格式。以便于使函数命名、底层行为以及继承或实现的行为,其最大的长处在于可以实现代码的可重用性。
Bean并不须要继承特别的基类(BaseClass)或实现特定的接口(Interface)。Bean的编写规范使Bean的容器(Container)可以分析一个Java类文件。并将其方法(Methods)翻译成属性(Properties),即把Java类作为一个Bean类使用。
Bean的编写规范包含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接口中。定义的方法都必须以实现这个接口方式进行。这个类就是事件监听者。比如例如以下代码:
//先定义了一个鼠标移动事件对象
public class MouseMovedExampleEventextends java.util.EventObject {
//在此类中包括了与鼠标移动事件有关的状态信息
...
}
//定义了鼠标移动事件的监听者接口
interface MouseMovedExampleListener extends java.util.EventListener {
//在这个接口中定义了鼠标移动事件监听者所应支持的方法
void mouseMoved(MouseMovedExampleEvent mme);
}
5.4. 事件监听者注冊与注销
为了让各种可能的事件监听者把自己注冊入合适的事件源中,就建立源与事件监听者间的事件流,事件源必须为事件监听者提供注冊和注销的方法。
在实际中,事件监听者的注冊和注销要使用下面标准的设计格式:
public void add<ListenerType>(< ListenerType> listener);
public void remove<ListenerType>(< ListenerType> listener);
以下是一个详细的实例,首先定义了一个事件监听者接口:
import java.util.*;
public interface ModelChangedListenerextends EventListener
{ void modelChanged(EventObjecte);}
5.5. 适配类
适配类是Java事件模型中极其重要的一部分。在一些应用场合。事件从源到监听者之间的传递要通过适配类来“转发”。比如:当事件源发出一个事件,而有几个事件监听者对象都可接收该事件,但仅仅有指定对象做出反应时。就要在事件源与事件监听者之间插入一个事件适配器类。由适配器类来指定事件应该是由哪些监听者来响应。
适配类成为了事件监听者。事件源实际是把适配类作为监听者注冊入监听者队列中。而真正的事件响应者并未在监听者队列中。事件响应者应做的动作由适配类决定。眼下绝大多数的开发工具在生成代码时。事件处理都是通过适配类来进行的。
六. Java Bean在JSP中的应用
在前面我们学习了Java Bean的编写,因为JavaBean是为了反复使用的程序段落具有“Writeonce, run anywhere, reuse everywhere”,即“一次性编写,不论什么地方运行,全部地方可重用”的特点,所以能够为JSP平台提供一个简单的、紧凑的和优秀的问题解决方式。能大幅度提高系统的功能上限、加快运行速度。并且不须要牺牲系统的性能。同一时候。採用JavaBean技术能够使系统更易于维护,因此极大地提高了JSP的应用范围。
前面介绍了通过JSP标记中的<jsp:useBean>动作来调用JavaBean,以下我们在学习完Java Bean的编写之后。再来复习一下这个标记:
<jsp:useBean id="beanId" scope="page|request|session|application" class="package.class"/>
首先,我们通过标记中的id属性标记Bean,以使JSP页面的其余部分能够正确的识别该Bean。
其次,使用scope属性来确定该Bean的使用范围。scope属性所决定的使用范围。
最后,class属性通知JSP页面从何处查找Bean,即找到Bean的.class文件。在此我们必须同一时候指定JavaBean的包(package)名和类(class)名,即class="package.class",否则JSP引擎将无法找到对应的Bean。
Java Bean 简单介绍及其应用的更多相关文章
- Java NIO简单介绍(二)
上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...
- java多线程(简单介绍)
简单介绍 线程是程序运行的基本执行单元.当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来 ...
- Java集合简单介绍
再最前面分享一下我再学习集合时的方法: 1.首先了解各集合的定义和特点 2.集合的构造方法和常用方法(增删改查等) 3.了解集合使用的场景,再什么情况下使用什么类型的集合(关键是集合的特性) 4.了解 ...
- JAVA NIO 简单介绍
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00918492 一:为什么要使用NIO技术 ...
- Java Swing 简单介绍
Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT更好的屏幕 ...
- hello1.java内容简单介绍
双击该Hello.java文件以查看它. 在Hello类,称为管理bean类,提供了getter和setter方法name中的Facelets页面表达式中使用属性.默认情况下,表达式语言引用类名,第一 ...
- Java NIO简单介绍(一)
Java NIO( New IO) 是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API. NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NI ...
- java字符串简单介绍
String:String对象初始化之后不可变线程安全简单的字符串操作使用String效率更高 StringBuffer:StringBuffer对象初始化之后可改变线程安全频繁的字符串操作可以使用S ...
- java transient简单介绍
我们都知道一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化,java的这样的序列化模式为开发人员提供了非常多便利,我们能够不必关系详细序列化的过程,仅仅要这个类实现了Serili ...
随机推荐
- python 多列表对应的位置的值形成一个新的列表
list1 = [1, 2, 3, 4, 5] list2 = ['a','b', 'c', 'd', 'e'] list3 = [1, 2, 3, 4, 5] multi_list = map(li ...
- OO第二单元总结——电梯调度问题
一.设计策略. 在三次作业中,多线程程序的实现分以下几个步骤: 1. 主线程Main类的创建多个线程. 2. 共享对象的synchronized锁保证线程之间的互斥访问. 3. 采用notifyAll ...
- 题解 P1774 【最接近神的人_NOI导刊2010提高(02)】
这道题很明显是求逆序对. 所谓逆序对,就是逆序的数对. 譬如在下面这个数列中: 1 2 3 4 6 5 6 5就是一个逆序对. 求逆序对的方法比较多,常见的有归并排序和树状数组(线段树当然也行). 本 ...
- IOS系统兼容input keyup事件
最近在做移动端模糊搜索功能,js监听input的keyup事件,在chrom模拟器和android手机环境运行都没有问题,到了ios手机却出现bug,没法实现功能: 查了好一会资料,发现keyup事件 ...
- DML语句的使用(delete,update,insert)
8)DML语句的使用 在PL/SQL中,DML语句与前面学习的 相同. begin --执行插入操作 insert into t001(id) values(1); - ...
- URAL 1517 Freedom of Choice
Freedom of Choice Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on Ural. Orig ...
- 在 RedHat/CentOS 7.x 中使用 nmcli 命令管理网络
在 RedHat/CentOS 7.x 中使用 nmcli 命令管理网络 学习了:https://linux.cn/article-5410-1.html#3_3613 http://www.linu ...
- 怎样制作C#安装程序
近期须要制作一个C#安装.在网上找了一些资料发现都不是非常完整,最后自己综合了一些资料,而且通过亲自检測,最后成功完毕C#打包成安装程序(打包成最简单的一种安装程序.假设须要更高的功能请自己在开发). ...
- volley源代码解析(六)--HurlStack与HttpClientStack之争
Volley中网络载入有两种方式,各自是HurlStack与HttpClientStack.我们来看Volley.java中的一段代码 if (stack == null) {//假设没有限定stac ...
- Webserver管理系列:4、WinPE
WinPE能够识别NTFS分区,使用WinPE能够备份/还原系统.能够重置用户password. 首先给大家看下怎样用WinPE重置password: 放入WinPE光盘-〉启动后-〉点開始菜单-〉程 ...