说明:共有3个Java类
package com.a;
/**
<p>Title:属性监听 </p>
<p>Description: </p>
<p>Copyright: Copyright (c) 2009</p>
<p>Company: </p>
@author
@version 1.0
*/
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
/**
* 这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。
* 可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。 此类是可序列化的。
* 在对它进行序列化时,它将保存(并恢复)本身可序列化的所有侦听器。在序列化期间,将跳过所有不可序列化的侦听器。
* @author Administrator
*
*/
public class PropertyChangeSupportTest {
// 临时的属性变量,为了侦听属性值的变化,该值的状态不再存储,每次的应用都是起初的状态,即変元
transient protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
/**
* 向侦听器列表添加一个 PropertyChangeListener
* @param listener 侦听器
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
if(listener == null)
{
throw new IllegalArgumentException();
}
listeners.addPropertyChangeListener(listener);
}
/**
* 通知所有已注册侦听器的绑定属性更新,如果属性值发生改变,就会触发PropertyChangeEvent事件
* @param prop 被更改属性的属性名称
* @param old 属性的旧值
* @param newValue 属性的新值
*/
public void firePropertyChangeListener(String prop,Object old,Object newValue)
{
listeners.firePropertyChange(prop, old, newValue);
}
/**
* 从侦听器列表移除一个为所有属性注册的 PropertyChangeListener
* 如果将 listener 多次添加到同一事件源,则在被移除之后,它至少将被通知一次
* @param listener 侦听器
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
listeners.removePropertyChangeListener(listener);
}
}//end class
**********************************************************
**********************************************************
package com.a;
import java.rmi.Remote;
/**
<p>Title:属性监听 </p>
<p>Description: </p>
<p>Copyright: Copyright (c) 2009</p>
<p>Company: </p>
@author
@version 1.0
*/
public class BeanTest extends PropertyChangeSupportTest {
// 此静态属性是提供侦听的属性名的,其值与下面的属性名一致
public static final String TEST = "name";
// 定义私有的侦听属性
private static String name =" null,null,null,null,null,null,null,null";
// private String age ="0";
public String getName() {
return this.name;
}
public void setName(String name) {
// 属性值未发生改变时,if判断在此仅打印出一条提示语句,返回程序控制权
if(this.name.equals(name))
{
// System.out.println(this.name);
// System.out.println(name);
System.out.println("BeanTest的属性name没有变化");
// 程序的控制流程到此结束,不再执行下面的代码
return;
}
// 此方法只有在属性值改变后触发,为注册的监听器激发一个PropertyChangeEvent事件
// 如果给定事件的旧值和新值相等并且都是非 null 的,则不会激发事件
this.firePropertyChangeListener(this.TEST, this.getName(), name);
// 这句可以说明点火方法不会修改属性值,实际在propertyChange()方法执行后也是一样的
// System.out.println("fire与propertyChange方法后的值为:"+this.getName());
// 这句才把新值传了过去,修改了属性值,此句应在调用fire方法后执行
this.name = name;
// System.out.println(this.name);
// this.firePropertyChangeListener(this.name, null, name);
}
// public String getAge() {
// return age;
// }
//
// public void setAge(String age) {
// if(this.age.equals(age))
// {
// System.out.println("BeanTest的属性age没有改变");
// return;
// }
// this.firePropertyChangeListener("age", this.getAge(), age);
//
// this.age = age;
// }
}//end class
************************************************************
************************************************************
package com.a;
/**
<p>Title:属性监听 </p>
<p>Description: </p>
<p>Copyright: Copyright (c) 2009</p>
<p>Company: </p>
@author
@version 1.0
*/
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import com.byh.pubsub.JMSpubsub;
/**
* listeners接口的方法propertyChange(PropertyChangeEvent evt)可以获得在属性值发生变化时
* 所激发的propertyChange的事件通知,及对此事件的处理
* 该类实现了PropertyChangeListener接口后就是一个PropertyChangeListener实体类
*/
public class BeanTestListener implements PropertyChangeListener {
/**
* 实现接口的方法,获得监听的事件源,在firePropertyChangeListener方法调用后执行该方法
* evt 是描述事件源
*/
// 8.1改变
// private String cto;
public void propertyChange(PropertyChangeEvent evt) {
// 调试
// System.out.println(BeanTest.TEST);
// getPropertyName()方法获取已更改属性的编程名称,返回被更改属性的编程名称。如果多个属性被更改,则返回 null
if(evt.getPropertyName().equals(BeanTest.TEST))
{
// 调试,此处方法的执行也不会改变侦听的属性值
// System.out.println("侦听时的值为:"+test.getName());
// 返回的被更改的属性名是空字符串为真时
// System.out.println("BeanTest的属性name改变");
}
// 测试age
// if(evt.getPropertyName().equals("age"))
// {
// System.out.println("BeanTest的属性age改变");
// }
// 调试
// System.out.println(evt.getPropertyName().equals(test.getName()));
System.out.println("侦听得到的发生变化的属性名:"+evt.getPropertyName()+"新值:"+evt.getNewValue()+" "+"旧值:"+evt.getOldValue());
//这里可以写当Bean得属性变化后的处理代码
}
/**
* main方法
*/
// public static void main(String args[])
// {
////// 实例化bean
// BeanTest test = new BeanTest();
////// 实例化BeanTestListener
// BeanTestListener lis = new BeanTestListener();
////// 调用bean继承父类的方法,为该类所有属性注册一个监听器
// test.addPropertyChangeListener(lis);
////// set方法中包含firePropertyChangeListener()方法
// test.setName("2");
//// test.setName("600000.SS,25.30,25.13,25.39,24.79,68261672");
////// test.setName("test3");
////// 测试age属性
////// test.setAge("1");
////// 调用bean继承父类的方法,为该类所有属性注册的监听器移除,
// test.removePropertyChangeListener(lis);
////
////// test.setName("test9");
////// 打印出test中name的属性
// System.out.println("最新的name值:"+test.getName());
////// 打印出test中age的属性
////// System.out.println("最新的age值:"+test.getAge());
////
// }
// public String getCto() {
// return cto;
// }
// public void setCto(String cto) {
// this.cto = cto;
// }
}//end class
分享到:
相关推荐
这种机制使得 JavaBean 在属性值改变时能够自动地通知到其他组件。为了实现这一功能,需要使用 `PropertyChangeSupport` 类来管理属性值变化事件。 ```java public class Alden3 extends Canvas { private String ...
在Java开发中,JavaBean是一种遵循特定编码规范的对象,通常用于封装数据属性以及相关的业务逻辑。JavaBean的设计模式不仅支持封装,还提供了事件处理机制,这对于构建动态交互式应用程序至关重要。本文将深入探讨...
在JavaBean中,"Bound属性"是指那些当其值发生改变时,能够自动通知相关监听器和其他依赖组件的属性。这种特性使得JavaBean在Java应用程序和网页设计中(如JSP)特别有用,因为它简化了组件之间的交互。 在JavaBean...
5. **事件处理**:JavaBean可能支持事件监听机制,允许其他组件订阅并响应Bean的特定事件。 在Java开发中,JavaBean广泛应用于MVC(Model-View-Controller)架构,特别是在Web应用中。它们可以作为模型层的实体,...
- **事件处理**:JavaBean可以支持事件监听机制,与其他组件进行交互。 3. **JavaBean的创建**: 创建JavaBean时,一般遵循以下步骤: - 定义一个公共类,类名通常以"Bean"结尾。 - 在类中定义私有属性,用于...
5. **属性通知**:JavaBean可以提供属性改变的通知机制,通过实现PropertyChangeSupport类,可以监听和处理属性值的变化。 在“01_JavaBean讲解(上)第2部分”中,可能涵盖了以下主题: 1. **JavaBean的创建**:...
综上所述,JavaBean在J2EE应用开发中扮演着关键角色,通过封装、属性、方法和事件机制,实现了代码的高效重用,简化了组件间的交互,提高了软件开发的效率和质量。理解并熟练运用JavaBean是每个J2EE开发者必备的技能...
4. **属性通知**:为了实现属性改变时的通知机制,可以实现 PropertyChangeSupport 接口,使用 addPropertyChangeListener 和 removePropertyChangeListener 方法来添加和移除监听器。 5. **序列化支持**:如果需要...
JavaBean可以支持事件监听机制,允许其他组件注册为监听者,当JavaBean的状态发生改变时,可以通知这些监听者。这在用户界面组件中尤其常见,如按钮点击事件。 4. **JavaBean的序列化** JavaBean默认支持序列化,...
- JavaBeans可以实现事件监听机制,通过发布和订阅事件来与其他组件通信。例如,`ActionListener`接口常用于按钮点击事件。 6. **Introspector类**: - Java的`Introspector`类可以用来获取JavaBean的元信息,如...
此外,属性通常通过getter和setter方法进行访问,这些方法遵循JavaBean的命名约定,如`getXXX()`和`setXXX()`,其中`XXX`是属性名称。 2. **事件处理**:在JavaBean记事本中,可能会涉及到事件监听和处理,例如点击...
**Dozer:JavaBean到JavaBean的映射神器** Dozer是Java开发中的一款强大工具,主要用于Java Bean之间的数据映射。它简化了在不同对象模型之间传递数据的过程,尤其在处理复杂对象结构时,其功能显得尤为重要。Dozer...
- **自省机制**:JavaBean利用Java反射机制来自动发现其属性和方法,简化了组件之间的交互。 #### 七、总结 JavaBean作为一种重要的Java组件技术,在软件开发领域有着广泛的应用。它不仅简化了代码的编写和维护,...
- **属性和事件**:JavaBean通过属性和事件与其他组件通信。 #### 使用设计模式 在JavaBean开发中,设计模式被广泛应用,以解决常见的软件设计问题。其中,观察者模式、工厂模式、单例模式等都是经常使用的模式,...
4. **事件处理**:JavaBean可能还需要包含事件监听和处理机制,使得其他组件能够注册监听器来响应特定的事件。 5. **文档**:良好的JavaBean应该有清晰的JavaDoc注释,以便开发者了解其用途、属性、方法和事件。 ...
此外,还可能涉及JavaBean的事件处理机制,例如ActionListener,以及如何使用PropertyChangeSupport类来实现属性变化监听。 "学员总结复习本门课程模板V1.0.ppt"则可能是一个详细的复习指南,涵盖了JavaBean的主要...
例如,开发者可以使用`java.beans.PropertyChangeSupport`类来管理属性变更的监听器,当某个属性值改变时,通过`firePropertyChange()`方法通知监听器。 在实际应用中,观察者模式广泛用于各种场景,如GUI组件之间...
4. **事件**:可选地,JavaBean可以包含事件发布和监听机制。 **JavaBean在JSP中的应用** 在JSP中,JavaBean被用来封装业务逻辑和数据处理,从而与展示层(JSP页面)分离,增强程序的可维护性和可扩展性。以下几点...
2. **JSP监听器**:JSP监听器是基于JavaBean的事件模型,主要涉及 javax.servlet.jsp.tagext.TagLibraryValidator 和 javax.servlet.jsp.tagext.PageClassifier 接口。这些监听器主要用于定制JSP页面解析和编译过程...
5. **IoC(控制反转)和DI(依赖注入)**:Spring框架中的依赖注入机制可以简化JavaBean的使用,通过配置文件或注解管理对象间的依赖关系。 6. **ORM(对象关系映射)框架**:如Hibernate和MyBatis,它们允许...