美文网首页
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的介绍及属性分类

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