`
cary1130
  • 浏览: 199901 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaBean的属性[转]

    博客分类:
  • java
阅读更多
JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, Bound与Constrained属性。

3.1.1 Simple属性

一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为"X"的属性。如果有一个方法名为isX,则通常暗指"X"是一个布尔属性(即X的值为true或false)。例如在下面这个程序中:


public class alden1 extends Canvas {
string ourString= "Hello"; //属性名为ourString,类型为字符串
public alden1(){     //alden1()是alden1的构造函数,与C++中构造函数的意义相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"属性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"属性 */
public String getString() {
return ourString;
}
}

3.1.2 Indexed属性

一个Indexed属性表示一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。例:


public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6}; // dataSet是一个indexed属性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/* 设置整个数组 */
public void setDataSet(int[] x){
dataSet=x;
}
/* 设置数组中的单个元素值 */
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/* 取得整个数组值 */
public int[] getDataSet(){
return dataSet;
}
/* 取得数组中的指定元素值 */
public int getDataSet(int x){
return dataSet[x];
}
}

3.1.3 Bound属性

一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。


图3.1是一个简单Bound属性示意图,当PushButton的background属性 与Dialog的background属性bind时,若PushButton的background属性发生变化时,Dialog的background属性也发生同样的变化。 例:


public class alden3 extends Canvas{
String ourString= "Hello"; //ourString是一个bound属性
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
/** 注:Java是纯面向对象的语言,如果要使用某种方法则必须指明是要使用哪个对象的方法,在下面的程序中要进行点火事件的操作,这种操作所使用的方法是在PropertyChangeSupport类中的。所以上面声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来点火ourString的属性改变事件。*/

public void setString(string newString){
String oldString = ourString;
ourString = newString;
/* ourString的属性值已发生变化,于是接着点火属性改变事件 */
changes.firePropertyChange("ourString",oldString,newString);
}
public String getString(){
return ourString;
}
/** 以下代码是为开发工具所使用的。我们不能预知alden3将与哪些其它的Bean组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其它的组件与此变化有关,因而alden3这个Bean要预留出一些接口给开发工具,开发工具使用这些接口,把其它的JavaBean对象与alden3挂接。*/

public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}

通过上面的代码,开发工具调用changes的addPropertyChangeListener方法把其它JavaBean注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其它Java对象与alden3挂接。
3.1.4 Constrained属性

一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值 的改变。过程如图3.2


例:下面程序中的constrained属性是PriceInCents。


public class JellyBean extends Canvas{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport Vetos=new VetoableChangeSupport(this);
/*与前述changes相同,可使用VetoableChangeSupport对象的实例Vetos中的方法,在特定条件下来阻止PriceInCents值的改变。*/


......
public void setPriceInCents(int newPriceInCents) throws PropertyVetoException {
/* 方法名中throws PropertyVetoException的作用是当有其它Java对象否决PriceInCents的改变时,要抛出例外。*/ /* 先保存原来的属性值*/

int oldPriceInCents=ourPriceInCents;
/**点火属性改变否决事件*/
vetos.fireVetoableChange("priceInCents",new Integer(OldPriceInCents), new Integer(newPriceInCents));

/**若有其它对象否决priceInCents的改变,则程序抛出例外,不再继续执行下面的两条语句,方法结束。若无其它对象否决priceInCents的改变,则在下面的代码中把ourPriceIncents赋予新值,并点火属性改变事件*/

ourPriceInCents=newPriceInCents;
changes.firePropertyChange("priceInCents", new Integer(oldPriceInCents),new Integer(newPriceInCents));
}

/**与前述changes相同,也要为PriceInCents属性预留接口,使其它对象可注册入PriceInCents否决改变监听者队列中,或把该对象从中注销

public void addVetoableChangeListener(VetoableChangeListener l)
{ vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
......
}
从上面的例子中可看到,一个constrained属性有两种监听者:属性变化监听者和否决属性改变的监听者。否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有constrained属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。
总之,某个Bean的constrained属性值可否改变取决于其它的Bean或者是Java对象是否允许这种改变。允许与否的条件由其它的Bean或Java对象在自己的类中进行定义。
分享到:
评论
1 楼 longzhe746 2008-05-27  
哈哈..我是初学者想学javabean
你写的我看不懂...
上传javabean的基础把

相关推荐

    javabean属性资料

    以下是对四种不同类型的JavaBean属性的详细说明: 1. **Simple 属性** Simple属性是最基础的属性类型,它包含一对getter和setter方法,用于获取和设置属性的值。属性名称通常与getter和setter方法的名字相对应。...

    java 基础之JavaBean属性命名规范问题.docx

    ### JavaBean属性命名规范 JavaBean是一种遵循特定编码标准的Java类,主要用于封装数据或表示简单的数据载体。在JavaBean中,属性的命名规范是非常重要的,因为它直接影响到代码的可读性和可维护性,同时也会影响到...

    前台字符串赋值给JavaBean属性自动类型转换

    下面我们将详细探讨这三个类的使用方法以及它们在字符串到JavaBean属性赋值中的应用。 首先,`BeanUtils`是Apache Commons BeanUtils库中的核心类,提供了大量与JavaBean操作相关的功能。其中,`BeanUtils....

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    JavaBean转XML的过程与XML转JavaBean相反。首先,创建一个JAXBContext对象,然后获取Marshaller实例。通过调用Marshaller的marshal()方法,我们可以将JavaBean对象转换为XML字符串或者写入XML文件。 3. XML标签大小...

    利用JAXB进行xml和javabean之间转换

    而JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许我们轻松地在Java对象(javabean)和XML文档之间进行转换。通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发...

    xml与javabean的转换

    它提供了一种简单的方式来映射JavaBean属性到XML元素,反之亦然。在本例中,我们主要关注`BeanXmlMapping`工具类,它是Jox库中的关键组件,负责执行XML和JavaBean之间的转换操作。 `BeanXmlMapping`提供了两个主要...

    javabean和xml互转详细文档+例子

    jox库的优点在于其简洁的API和对JavaBean属性的自动映射,使得开发人员能够快速地进行数据交换。 5. **注意事项** - 确保JavaBean的属性名称与XML元素名称相匹配,因为jox库默认使用属性名称作为XML元素的标签。 ...

    minimalcode-convert:JavaBean 属性的简约转换系统

    "minimalcode-convert"是一个Java项目,专注于提供一个简约的JavaBean属性转换系统。这个工具的设计目标是简化Java对象之间的数据转换过程,特别是在处理不同数据结构间的映射时,如JSON到Java对象、Java对象到...

    JavaBean与JsonString的相互转换

    在某些情况下,JavaBean的属性与JsonString中的键可能不完全匹配,或者需要进行一些特殊处理,这时可以通过注解或自定义`JsonSerializer`和`JsonDeserializer`来实现。 总结,JavaBean和JsonString的转换是Java...

    根据数据库表生成JavaBean属性.sql

    可以 将 数据库表中字段转为相应的 javaBean 对象 很方便的 生产bean

    Json一键转Javabean工具

    "Json一键转Javabean工具"是一个实用的开发辅助工具,它能够帮助Java开发者快速地将JSON格式的数据转换成对应的JavaBean对象,极大地提高了开发效率。 JSON转换为JavaBean的过程通常包括以下步骤: 1. **解析JSON...

    javabean和xml互相转换工具类以及jar包

    - **使用DOM(Document Object Model)**:通过创建Document对象,遍历JavaBean的属性,然后创建Element节点和Text节点,构建XML文档结构。 - **使用JAXB(Java Architecture for XML Binding)**:JAXB是Java标准...

    JavaBean与Json相互转换

    JavaBean遵循一定的规范,通常包含一个无参数的构造器,属性私有化并提供getter和setter方法,以及可能的逻辑业务方法。例如,一个简单的User JavaBean可以这样定义: ```java public class User { private String...

    Xml与javaBean互转.zip

    反之,从JavaBean到XML的过程则是获取JavaBean的属性值,生成相应的XML元素和属性。 8. **性能考虑**:不同的转换方法有不同的性能特征。例如,DOM需要大量内存,适合小到中型的XML;SAX和StAX更适合大型XML,因为...

    JavaBean的属性

    JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, ...

    javabean概念和使用

    1. 属性(properties):JavaBean 提供了高层次的属性概念,属性在 JavaBean 中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的 API 的支持。 2. 方法(method):JavaBean 中的方法就是...

    java 基础之JavaBean属性命名规范问题

    Java 基础之 JavaBean 属性命名规范问题 JavaBean 属性命名规范问题是 Java 开发中一个重要的知识点。JavaBean 是一种特殊的 Java 类,它遵循特定的命名规范,以便于其他 Java 类可以正确地访问和操作它的属性。...

    javabean和json转换_javabean2json_

    JavaBean遵循一定的规范,通常包含私有属性、公有的getter和setter方法,以及一个无参构造函数。例如: ```java public class User { private String name; private int age; public User() {} public String...

    javabean 与 xml文件转换

    它应具有默认的无参构造器,公开的属性(getter和setter方法)以及可选的操作方法。例如: ```java public class User { private String name; private int age; public User() {} public String getName() {...

    json一键转javabean工具

    "json一键转javabean工具"是一个非常实用的开发辅助工具,它的主要功能是将JSON格式的数据自动转换为对应的JavaBean类,大大节省了开发者手动编写Java类的时间,提高了开发效率。这个工具可能包含以下特性: 1. **...

Global site tag (gtag.js) - Google Analytics