java属性的分类_JavaBean的介绍及属性分类

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,用法和绑定属性类似,在此我就不详细介绍了…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值