JavaBean 浅析

来源:互联网 发布:mac目录结构 编辑:程序博客网 时间:2024/05/20 02:30

知识的大厦都是由概念堆积出来的,学习是认识概念及清楚概念之间的关系                         +
 
---------------------------------------------------------------------------------------------------------------------
 
本篇文章将从以下几个方面及解析javaBean,就怎么编写一个Javabean
 
1、什么是JavaBean  为什么要使用Javabean
 
2、一个Javabean的要求
 
3、JavaBean属性的类型
 
4、JavaBean的持久化
 
 
 
1、什么是JavaBean  为什么要使用Javabean
  
   Bean 译为豆子 豆子被豆荚说包裹  
   JavaBean通过封装的手法将一些功能的封装在一个类中,并暴露出一定的属性。其中这个类有很强的复用性,可以在不同的应用程序中复用。比如说我们常见的一些界面的控件就是一个JavaBean。
   根据以上解释,JavaBean 可以在不同的应用中复用,提高开发效率。
  
2、一个JavaBean要求
   
     1、JavaBean类必须有一个没有参数的构造函数。
 
     2、JavaBean类所有的属性最好定义为私有的。
 
     3、JavaBean类中定义函数setXxx() 和getXxx()来对属性进行操作。其中Xxx是首字母大写的私有变量名称。
3、javaBean属性的类型
   a、简单属性
   简单属性即是一个单独的值,比如说一个字串和整型属性
   需要set/get方法
   setXxx();
   getXxx();
   b、索引属性
    索引属性一般数组,需提供两对set/get方法
    setXxx()//设置整个数组
    getXxx()//获取整个数组
 setXxx(int i,xxx  xxx)//设置数组某个索引的值
 getXxx(int i);//获取数组某个索引的值
  c、绑定属性
     设置相应的属性变化的监听
  public void addPropertyListener(PropertyChangeListener listener)
  public void removePropertyChangeListener(PropertyChangeListener listener)
  d、约束属性
     提供约束,监听器可“否决”属性的改变,并还原旧属性
  public void addVetoChangeListener(VetoableChangeListener listener)
  public void removeVetoChangeListener(VetoableChangeListener listener)

4、JavaBean的持久化
   JavaBean持久化就是将相应的对象保存下来。说到这里不禁想起了序列化。那这里有什么不同呢。我个人理解是序列化是保存内存映像,恢复是直接恢复内存。而JavaBean的持久化是将对象必要的属性保存下来,待恢复的时候,使用相应属性重新构建对象
   核心API:
     XMLEncoder
  XMLDecoder
   若该类不是一个标准的javaBean,比如没有无参构造器等等,还需使用PersistenceDelegate
   读者搜索下以上API的使用,这里不详细介绍
   
   
 举个栗子:
 package com.lqp.main;

import java.beans.IntrospectionException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyDescriptor;
import java.beans.PropertyVetoException;
import java.beans.SimpleBeanInfo;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;

public class TestBean {
public static void main(String[] args) {
 ABean bean=new ABean();
 PropertyChangeListener listener =new PropertyChangeListener(){

  @Override
  public void propertyChange(PropertyChangeEvent evt) {
   System.out.println("properttName="+evt.getPropertyName() +" newvalue="+ evt.getNewValue() + " oldvalue=" + evt.getOldValue());
  }
 };
 PropertyChangeListener listener2 =new PropertyChangeListener(){

  @Override
  public void propertyChange(PropertyChangeEvent evt) {
   System.out.println("i am second listener");
  }
 };
 VetoableChangeListener vetoListener = new VetoableChangeListener() {
  
  @Override
  public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
   // TODO Auto-generated method stub
   if((int)evt.getNewValue()==0){
    throw new PropertyVetoException("rollback", evt);
   }
   System.out.println("vetoChange1");
   
  }
 };
 VetoableChangeListener vetolistener2 = new VetoableChangeListener(){
  @Override
  public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
   // TODO Auto-generated method stub
   System.out.println("vetoChange2");
  }  
 };
 bean.addVetoChangeListener(vetoListener);
 bean.addVetoChangeListener(vetolistener2);
 bean.addPropertyListener(listener);
 bean.addPropertyListener(listener2);
 bean.setBeanName("beans");
 bean.setTypes(new String[]{"fasdf","fsad","fasd"});
 bean.setValue(3241);
 bean.setValue(34);
 bean.setValue(0);
 System.out.println(bean.getValue());
}
public static class ABean{
 private String beanName="";
 private String[] types;
 private int valueNu = 0;
 private PropertyChangeSupport propertySupport =new PropertyChangeSupport(this);
 private VetoableChangeSupport vetosupport =new VetoableChangeSupport(this);
 public String getBeanName() {
  return beanName;
 }
 public void setBeanName(String beanName) {
  this.beanName = beanName;
 }
 public String[] getTypes() {
  return types;
 }
 public void setTypes(String[] types) {
  this.types = types;
 }
 public String getTypes(int i){
  if(i>=0&&i<types.length){
   return types[i];
   
  }
  return "";
 }
 public void setTypes(int i,String value){
  if(i>=0&&i<types.length){
   types[i]=value;
  }
 }
 public int getValue() {
  return valueNu;
 }
 public void setValue(int value) {
  int oldvalue=getValue();
  this.valueNu = value;
  propertySupport.firePropertyChange("valueNu", oldvalue, value);
  try {
   vetosupport.fireVetoableChange("valueNu", oldvalue, value);
  } catch (PropertyVetoException e) {
   // TODO Auto-generated catch block
   this.valueNu=oldvalue;
   e.printStackTrace();
  }
 }
 public void addPropertyListener(PropertyChangeListener listener){
  propertySupport.addPropertyChangeListener(listener);
 }
 public void removePropertyChangeListener(PropertyChangeListener listener){
   propertySupport.removePropertyChangeListener(listener);
 } 
 public void addVetoChangeListener(VetoableChangeListener listener){
  vetosupport.addVetoableChangeListener(listener);
 }
 public void removeVetoChangeListener(VetoableChangeListener listener){
  vetosupport.removeVetoableChangeListener(listener);
 }
}
class ABeanInfo extends SimpleBeanInfo{
 PropertyDescriptor[] descripters ;
public ABeanInfo(){
 try {
  descripters =new PropertyDescriptor[]{   
    new PropertyDescriptor("valueNu", TestBean.ABean.class)
  };
 } catch (IntrospectionException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
public PropertyDescriptor[] getPropertyDescriptor(){
 return descripters;
}
}
}