要委托的Bean类写法。
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Date; public class StudentBean {
private String name;
private int age;
private Date birthday; //创建委托。
private PropertyChangeSupport pcs = new PropertyChangeSupport(this); public StudentBean() { } public StudentBean(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
String oldvalue = this.name;
this.name = name;
//激发帧听器。
pcs.firePropertyChange("name", oldvalue, this.name);
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} //加入帧听方法。
public void addPropertyChangeListener(PropertyChangeListener listener)
{
pcs.addPropertyChangeListener(listener);
}
//加入移除帧听方法。
public void removePropertyChangeListener(PropertyChangeListener listener)
{
pcs.removePropertyChangeListener(listener);
}
}
测试代码:
import java.beans.IntrospectionException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method; public class IntrospectorTest {
public static void main(String[] args)
{
try{
Class st = Class.forName("StudentBean");
Constructor<StudentBean> cct = st.getConstructor(null);
StudentBean sbean = cct.newInstance();
//注册帧听器。
sbean.addPropertyChangeListener(new PropertyChangeListener(){ @Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getPropertyName()+":"+evt.getOldValue()+":"
+evt.getNewValue());
}
} );
//内省获取Bean字段描述。
PropertyDescriptor pd = new PropertyDescriptor("name", StudentBean.class);
//开启对该字段的帧听。
pd.setBound(true);
Method namgget = pd.getWriteMethod();
namgget.invoke(sbean, "wangwu");
System.out.println(sbean.getName());
}catch(Exception e)
{
e.printStackTrace();
}
}
}