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;
}
}
}
- 浅析JavaBean
- javaBean浅析
- 浅析JavaBean
- JavaBean 浅析
- 浅析JavaBean
- JavaBean 浅析
- javaBean浅析(一)
- [Java] JavaBean浅析
- JSP+JavaBean+Servlet结构工作原理浅析
- 浅析Jsp中JavaBean的运用
- JavaBean
- JAVABEAN
- JavaBean
- javabean
- JAVABEAN
- javabean
- javabean
- JavaBean
- PL/SQL Developer 1105-32/64位软件下载及激活码
- cydia闪退解决方案
- Spring中classpath和classpath*的问题
- Linux MySQL安装
- Spring的applicationContext.xml详解
- JavaBean 浅析
- leetcode 515. Find Largest Value in Each Tree Row
- Android Studio更新后打开老项目报错,但是能运行
- HDU6069(数学)
- C语言中的指针和内存泄漏
- iOS UILabel 中的文本设置固定宽度
- iOS 键盘相关
- Bezier曲线 OpenCV
- ACM DP Dropping water balloons