/** Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved*/
packagecom.xingguo.java.beans.properties;import java.beans.*;importjava.io.Serializable;/*** Person
*
*@authorguoxing
* @date 2020/11/24 11:28 AM
*@since
*/
public class Person implementsSerializable {privateString name;private intage;/*** javabeans - persistence
* 首先要求实现 java.io.Serializable
* 对于 不需要持久化的属性 要求 使用 "transient" 关键字保证其不会被持久化*/
//设置当前Bean的属性变化支持工具//强制属性更新
private final transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);//勉强属性更新
private final transient VetoableChangeSupport vetoableChangeSupport = new VetoableChangeSupport(this);publicString getName() {returnname;
}/*** 当名称属性发生变化时,
*
*@paramname*/
public voidsetName(String name) {
String oldVal= this.name;
String newVal=name;//创建属性变更事件
PropertyChangeEvent propertyChangeEvent = new PropertyChangeEvent(this, "name", oldVal, newVal);//勉强属性
fireVetoableChange(propertyChangeEvent);this.name =name;//强迫事件变更机制//强迫事件变更发生在 属性成功变更之后//属性变更后发布事件//发布事件
propertyChangeSupport.firePropertyChange(propertyChangeEvent);
}public voidfireVetoableChange(PropertyChangeEvent event) {try{//校验要求name 不能为纯粹的数字
String propertyName =event.getPropertyName();if ("name".equals(propertyName) &&isNumeric(String.valueOf(event.getNewValue()))) {throw new PropertyVetoException("name属性要求不能为纯数字", event);
}
vetoableChangeSupport.fireVetoableChange(event);
}catch(PropertyVetoException propertyVetoException) {throw newRuntimeException(propertyVetoException);
}
}public voidaddVetoableChangeListener(VetoableChangeListener listener) {
}public voidremoveVetoableChangeListener(VetoableChangeListener listener) {
}public voidaddPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}public voidremovePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@OverridepublicString toString() {return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}public static booleanisNumeric(String str) {if (str == null) {return false;
}else{int sz =str.length();for (int i = 0; i < sz; ++i) {if (!Character.isDigit(str.charAt(i))) {return false;
}
}return true;
}
}
}