码迷,mamicode.com
首页 > 编程语言 > 详细

JavaBean

时间:2015-10-04 19:41:13      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

一、初识JavaBean

什么叫做JavaBean呢?

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。特殊之处在

  • 1、所有属性为private
  • 2、提供默认构造方法
  • 3、提供getter和setter
  • 4、实现serializable接口。

如下边的Students就是一个JavaBean类:

 

public class Students {
    private String name;
    private String sex;
    private double grades;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public double getGrades() {
        return grades;
    }
    public void setGrades(double grades) {
        this.grades = grades;
    }
    
}

 

一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。

  1. setName的属性是name。
  2. setSex的属性是sex
  3. setGrades的属性是grades
  4. getClass的属性是class。

所有的类都继承与Object,Object类中有getClass方法,所有上面也有一个class属性。

 二、内省操作JavaBean的属性

什么事内省?

          内省是Java语言对Bean类属性、事件的一种缺省处理方法。例如:Students类中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了 一套API用来访问某个属性的getter/setter方法,通过这些API可以使你不需要了解这个规则,这些API存放于包java.beans中。一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。

PartI、某个对象的所有属性名称都打印出来

    /*某个对象的所有属性名称都打印出来
     * 
     * 1、连同父类的属性值也打印出来。(就像Students类,打印四个属性grades、name、sex、class,包括一个Object的一个class属性)
     * 
     * public static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException
     * 
     * 2、只打印该类的属性,父类的属性不打印 (就像Students类,只打印三个属性grades、name、sex
     * 
     * public static BeanInfo getBeanInfo(Class<?> beanClass,Class<?> stopClass throws IntrospectionException
     * */
    public static void test1() throws IntrospectionException{
        BeanInfo info=    Introspector.getBeanInfo(Students.class,Object.class);
        PropertyDescriptor[] pds=info.getPropertyDescriptors();
        for(PropertyDescriptor pd:pds){
            System.out.println(pd.getName());
        }
    }

PartII、操作对象的某个属性:

/*
     * 1、通过PropertyDescriptor来获得一个属性的 PropertyDescriptor
     *  PropertyDescriptor(String propertyName, Class<?> beanClass) 
     *  
     *  2、通过PropertyDescriptor对象的方法
     *  getPropertyType()  获得属性的 Class 对象
     *  getReadMethod()  获得应该用于读取属性值的方法。
     *  getWriteMethod()  获得应该用于写入属性值的方法。
     */
    public static void test2() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
        Students p=new Students();
        PropertyDescriptor pd=new PropertyDescriptor("grades",Students.class);
        System.out.println(pd.getPropertyType());
        Method method=pd.getWriteMethod();
        method.invoke(p, 60);
        System.out.println(p.getGrades());
        method=pd.getReadMethod();
        System.out.println(method.invoke(p, null));
    }

 三、使用BeanUtils工具包来操作JavaBean类。

请下载下边的工具包:

 

JavaBean

标签:

原文地址:http://www.cnblogs.com/lyjs/p/4854725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!