黑马程序员技术交流社区

标题: 关于JavaBean [打印本页]

作者: 骑上最爱    时间: 2013-5-31 17:34
标题: 关于JavaBean
JavaBean有什么作用?
以及JavaBean能做什么,请把详细操作步骤和方法给大家分享下吧!




作者: zZZ~~    时间: 2013-5-31 17:45
一、定义:
     把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。实际上JavaBean就是一个java类,在这个java类中就默认形成了一种规则——对属性进行设置和获得。而反之将说ava类就是一个JavaBean,这种说法是错误的,因为一个java类中不一定有对属性的设置和获得的方法(也就是不一定有set和get方法)。
二、从JavaBean中就引出了一个内省的概念
     内省:把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?外界使用的人不用不知道,这就称为内省。
三、使用内省解释JavaBean中setProperty()和setProperty()方法的实现原理。实际上也是用反射的那一套做法
package itcast.Test5;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/*5、写一个方法,public void setProperty(Object obj, String propertyName, Object value){},
此方法可将obj对象中名为propertyName的属性的值设置为value。*/
//这题中用了内省的简单应用,理解到了JavaBean中setProperty()方法和getProperty()方法的实现
public class SetPropertyTest {

     /**
     * @param args
     */
     public static void main(String[] args) {
          // TODO Auto-generated method stub
          Point pt1 = new Point(3, 5);
          String propertyName = "x";
          Object value = 7;
         
          getProperty(pt1, propertyName);
         
          setProperty(pt1, propertyName, value);
         
          System.out.println(pt1.getX());
     }
     //setProperty()方法的实现
     private static void setProperty(Object object, String propertyName, Object value) {
          try {
               //使用java.beans包中的PropertyDescriptor(属性操作符类)
               PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, object.getClass());
               //通过反射来得到Point这个javabean的set方法
               Method methodSetX = pd2.getWriteMethod();
               methodSetX.invoke(object,value);
          } catch (Exception e) {
               // TODO: handle exception
          }
     }
     //getProperty()方法的实现
     private static void getProperty(Object object, String propertyName) {
          try {
               PropertyDescriptor pd1 = new PropertyDescriptor(propertyName, object.getClass());
               Method methodGetX = pd1.getReadMethod();
               Object retVal = methodGetX.invoke(object);
               System.out.println(retVal);
          } catch (Exception e) {
               // TODO: handle exception
          }
     }

}

class Point {
     private int x;
     private int y;
   
     public Point(int x, int y) {
          super();
          this.x = x;
          this.y = y;
     }

     public int getX() {
          return x;
     }

     public void setX(int x) {
          this.x = x;
     }

     public int getY() {
          return y;
     }

     public void setY(int y) {
          this.y = y;
     }
   
}

作者: Super_Class    时间: 2013-5-31 18:08
5、IntroSpector 内省

IntrosPector 是用来操作JavaBean类的;

所谓的javabean类其实是一个特殊的java类含有get和set方法的类。

三种方法:

1、使用PropertyDescriptor 属性描述符

PropertyDescriptor pd = new PropertyDescriptor(String propertyName,Class BeanClass);

getX()

Method getMethod = pd.getReadMethod();

set(类型  对象);

Method setMethod = pd.getWriteMethod();

2、使用Introspector  内省

BeanInfo beanInfo = Introspector.getBeanInfo(字节码比如:ReflectPoint.class);

再得到所有的属性描述符

PropertyDescriptor [] pds = beanInfo.getPropertyDescriptors();

然后可以进行迭代获得每个字段的值(使用get方法或使用set方法修改)

3、直接使用BeanUtils类(静态方法)

BeanUtils.setProperty(,,);

BeanUtils.getProperty();
作者: a464538715    时间: 2013-5-31 18:32
Super_Class 发表于 2013-5-31 18:08
5、IntroSpector 内省

IntrosPector 是用来操作JavaBean类的;

技术分好高啊
作者: Super_Class    时间: 2013-5-31 18:43
a464538715 发表于 2013-5-31 18:32
技术分好高啊

我在线50个小时了。这已经算是少的了
作者: 642384938    时间: 2013-5-31 18:50
本帖最后由 642384938 于 2013-6-1 23:21 编辑

JavaBean是Java中的一个组件技术,类似于微软的COM组件,其本质上是一个封装了一系列属性和方法的类。该类遵循一定的标准,提供公共的方法,只要遵循同样的标准,用户就可以调用封装在JavaBean里面已经设计好的方法,从而达到代码重复利用的目的。
Sun公司对JavaBean的定义为:可以重复利用的软件组件,它在遵循JavaBean技术规范的基础上提供特定的功能,这些功能模块可以组合成更大规模的应用系统。
JSP+JavaBean的组合已经成为开发小型B/S应用的最佳选择,使用JavaBean可以把业务处理功能从JSP页面分离,从而减少JSP页面中间的Java代码量,使JSP页面专注处理数据的显示,从而使页面的逻辑变得十分清晰,自从采用JSP+JavaBean的组合,编写和维护JSP的程序已经不在是一件令人头疼的事情,JavaBean的出现给JSP的开发带来了质的变化,JSP的开发从此变得简单可行。
JSP本质就是把Java代码嵌套在静态的HTML页面中间,从而是静态的HTML页面有了动态的功能,从原理上说,仅仅用JSP就可以实现所有动态功能

package com.note.bean;

public class Note
{
        private int id;
        private String name;
        private String title;
        private String email;
        private String qq;
        private String website;
        private String context;
        public int getId() {
                return id;
        }
        public Note(String name, String title, String email, String qq,
                        String website, String context) {
                super();
                this.name = name;
                this.title = title;
                this.email = email;
                this.qq = qq;
                this.website = website;
                this.context = context;
        }
        public void setId(int id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public String getTitle() {
                return title;
        }
        public void setTitle(String title) {
                this.title = title;
        }
        public String getEmail() {
                return email;
        }
        public void setEmail(String email) {
                this.email = email;
        }
        public String getQq() {
                return qq;
        }
        public void setQq(String qq) {
                this.qq = qq;
        }
        public String getWebsite() {
                return website;
        }
        public void setWebsite(String website) {
                this.website = website;
        }
        public String getContext() {
                return context;
        }
        public void setContext(String context) {
                this.context = context;
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2