美文网首页
JavaBean的介绍及属性分类

JavaBean的介绍及属性分类

作者: 背对背拥抱 | 来源:发表于2019-05-07 12:54 被阅读0次
1.什么是JavaBean?
  • JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中对其直接进行可视化操作;
  • 软件组件就是指可以进行独立分离、易于重复使用的软件部分。
  • JavaBean就是一种基于Java平台的软件组件思想;
    JavaBean也是一种独立于平台和结构的应用程序编程接口(API)。JavaBean保留了其他软件组件的技术精华,并添加了被其他软件组件技术忽略的技术特性,使得它成为完整的软件组件解决方案的基础,并可移植的Java平台上方便的用于网络世界中。

通俗地讲,bean,保存数据的实体类,通常与数据库中的表对应,也称为,pojo、entity、domain。比如Person,Apple等,只有private属性和public setxxxx和getxxx;具体实例就是对应表中的一行,那些Hibernate,ibatis等orm框架,都支持它们和表的互相映射。

2.如何使用JavaBean?

使用javabean必须满足下面两种条件:

  • 提供无惨构造器;
  • 提供getter和setter方法访问它的属性;
    此外,可能还需要实现序列化,待考证。
3.JavaBean的分类:

JavaBean可分为两种:

  • 一种是有用户界面(UI,User Interface)的JavaBean;
  • 一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。
    JSP通常访问的是后一种JavaBean。
4.JavaBean属性的分类及使用:
1) 简单属性(simple property):

定义:

  • 简单属性是非数组类型的属性,它的修改器必须接受一个参数,参数类型由属性的特性决定,可以是任意类型;
  • 而简单属性的访问器仅仅是用于返回属性的值,它不接受任何参数,但它要返回一个值,返回值的类型必须与修改器所接收的参数类型一致。
public class Student {
  private String name;
  private String age;
  public String getName() {
      return name;
  }
  public void setName(String name) {
      this.name = name;
  }
  public String getAge() {
      return age;
  }
  public void setAge(String age) {
      this.age = age;
  }
}
2) 索引属性(indexed property):

定义:

  • 索引属性是数组类型的属性,JavaBean中需要对索引索性提供两对setter和getter方法;
  • 一对用于设置和获取数组本身,另一对用于设置和获取数组中的元素。
public class Student {
private String[] hobbies;

//设置或获取属性本身
public String[] getHobbies() {
    return hobbies;
}

public void setHobbies(String[] hobbies) {
    this.hobbies = hobbies;
}

//设置或获取属性中的元素
public String getHobbies(int i) {
    return hobbies[i];
}

public void setHobbies(int i,String hobby) {
    this.hobbies[i] = hobby;
}
}
3) 绑定属性(bound property):

定义:

  • Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。

  • Bound属性是观察者模式在JDK中应用,PropertyChangeSupport类中得以实现。

使用步骤:

第一步:要使用这个类,bean必须有此类的数据域;

private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

第二步:注册监听器,bean要实现下面两个方法:

void addPropertyChangeListener(PropertyChangeListener listener);
void removePropertyChangerListener(PropertyChangerListener listener);

第三步:将变化的bean属性事件传递给监听器:

isteners.firePropertyChange(String propertyName, Object oldString, Object newString);

注意:该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。

下面用SWT举个实际例子:
PropertyChangeSupport的方法可以写在Bean类中,但是在实际项目中,Bean类太多,我们一般把PropertyChangeSupport写在单独的类中,然后让所有的Bean类继承它即可。

第一步:
PropertyChangeSupport类:

public class Model {
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }
         
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
    protected void firePropertyChange(String propertyName, Object oldValue,Object newValue) {
        changeSupport.firePropertyChange(propertyName, oldValue, newValue);
    }
    
}

第二步:
JavaBean类:

public class Student extends Model{
    private String name;
    private String age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.firePropertyChange("name", this.name, this.name = name);
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.firePropertyChange("age", this.age, this.age = age);
    }
    
}

第三步:用SWT/Jface画的界面,需要绑定属性字段:

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class StudentDesign extends ApplicationWindow {
    private DataBindingContext m_bindingContext;
    private Text text;
    private Text text_1;
    Student student  = new Student();
    private int flag = 0;

    /**
     * Create the application window.
     */
    public StudentDesign() {
        super(null);
        createActions();
//      addToolBar(SWT.FLAT | SWT.WRAP);
//      addMenuBar();
//      addStatusLine();
    }

    /**
     * Create contents of the application window.
     * @param parent
     */
    @Override
    protected Control createContents(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new GridLayout(5, false));
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        
        Label label = new Label(container, SWT.NONE);
        label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        label.setText("\u59D3\u540D\uFF1A");
        
        text = new Text(container, SWT.BORDER);
        GridData gd_text = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
        gd_text.widthHint = 100;
        text.setLayoutData(gd_text);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        
        Label label_1 = new Label(container, SWT.NONE);
        label_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        label_1.setText("\u5E74\u9F84\uFF1A");
        
        text_1 = new Text(container, SWT.BORDER);
        GridData gd_text_1 = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
        gd_text_1.widthHint = 100;
        text_1.setLayoutData(gd_text_1);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        new Label(container, SWT.NONE);
        
        Button button = new Button(container, SWT.NONE);
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                flag++;
                student.setName("张三"+flag);
                student.setAge("十八岁"+flag);
            }
        });
        GridData gd_button = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_button.widthHint = 80;
        button.setLayoutData(gd_button);
        button.setText("\u6309\u94AE");
        new Label(container, SWT.NONE);
        m_bindingContext = initDataBindings();

        return container;
    }

    /**
     * Create the actions.
     */
    private void createActions() {
        // Create the actions
    }

    /**
     * Create the menu manager.
     * @return the menu manager
     */
    @Override
    protected MenuManager createMenuManager() {
        MenuManager menuManager = new MenuManager("menu");
        return menuManager;
    }

    /**
     * Create the toolbar manager.
     * @return the toolbar manager
     */
    @Override
    protected ToolBarManager createToolBarManager(int style) {
        ToolBarManager toolBarManager = new ToolBarManager(style);
        return toolBarManager;
    }

    /**
     * Create the status line manager.
     * @return the status line manager
     */
    @Override
    protected StatusLineManager createStatusLineManager() {
        StatusLineManager statusLineManager = new StatusLineManager();
        return statusLineManager;
    }

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String args[]) {
        Display display = Display.getDefault();
        Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
            public void run() {
                try {
                    StudentDesign window = new StudentDesign();
                    window.setBlockOnOpen(true);
                    window.open();
                    Display.getCurrent().dispose();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Configure the shell.
     * @param newShell
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("New Application");
    }

    /**
     * Return the initial size of the window.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(475, 352);
    }
    protected DataBindingContext initDataBindings() {
        DataBindingContext bindingContext = new DataBindingContext();
        //
        IObservableValue observeTextTextObserveWidget = WidgetProperties.text(SWT.Modify).observe(text);
        IObservableValue nameStudentObserveValue = BeanProperties.value("name").observe(student);
        bindingContext.bindValue(observeTextTextObserveWidget, nameStudentObserveValue, null, null);
        //
        IObservableValue observeTextText_1ObserveWidget = WidgetProperties.text(SWT.Modify).observe(text_1);
        IObservableValue ageStudentObserveValue = BeanProperties.value("age").observe(student);
        bindingContext.bindValue(observeTextText_1ObserveWidget, ageStudentObserveValue, null, null);
        //
        return bindingContext;
    }
}

此时,我们无论是修改界面,还是修改bean,都能动态的获取值和变化值。

4)约束属性(constrained property):

定义:

约束属性是指当该种属性的值发生变化时,要通知其它的对象,但是该对象可否决属性值的变更。

约束属性用到的类是VetoableChangeSupport,用法和绑定属性类似,在此我就不详细介绍了…

相关文章

  • JavaBean的介绍及属性分类

    1.什么是JavaBean? JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中对其直接进...

  • JAVA Web学习(10)___第7章 JavaBean 技术

    第7章 JavaBean 技术 7.1 JavaBean 介绍 7.1.1 JavaBean概述 JavaBean...

  • Java 基础 51 JavaBean的概述及其BeanUti

    1.1 JavaBean的概述和规范 JavaBean的概述:将需要操作的多个属性封装成JavaBean 简单来说...

  • Java——JavaBean解惑及使用方法

    1. JavaBean介绍及作用 JavaBean是使用Java语言开发的一个可重用的组件,在开发中可以使用Jav...

  • 关联对象

    分类、类扩展、继承的总结讲述了分类,介绍到分类可以添加属性,但是属性的get、set方法需要通过runtime的关...

  • JavaBean 的属性自省

    首先我们要知道什么是javabean,而属性指的是什么 ? javabean可以理解是一种规范,编码要有一定的规范...

  • Java内省机制(Introspector)

    内省 通过反射的方式操作 JavaBean 的属性内省基于反射实现,主要用于操作JavaBean,Introspe...

  • javascript对象的属性介绍

    本篇主要介绍JS中对象的属性,包括:属性的分类、访问方式、检测属性、遍历属性以及属性特性等内容。 属性:对象的成员...

  • PHP基础、安装phpstorm

    一.准备及介绍 1、本文介绍:PHP变量的特点及分类、写注释的写法、php数据类型分类、phpstorm的安装 2...

  • Json

    Json与javabean转化 json如下,主要是包括对象,还有数组,对象属性之间用逗号隔开 javabean对...

网友评论

      本文标题:JavaBean的介绍及属性分类

      本文链接:https://www.haomeiwen.com/subject/nireoqtx.html