2 内省

1、内省(Introspector) — JavaBean
内省基于反射实现,主要用于操作JavaBean,通过内省 可以获取bean的getter/setter

2、为什么要学内省?
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以SUN公司开发了一套API,专门用于操作java对象的属性。

3、什么是JavaBean和属性的读写方法?
通过内省技术访问(java.beans包提供了内省的API)JavaBean的两种方式。
1)通过PropertyDescriptor类操作Bean的属性
2)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

4、PropertyDescriptor
PropertyDescriptor顾名思义,就是属性描述之意。它通过反射
快速操作JavaBean的getter/setter方法。
重要方法:
getWriteMethod() – 获取setter方法,返回Method对像
getReadMethod() – 获取getter方法,返回Method对像

@Test
    public void test1() throws Exception{
        //得到Student类中的属性,被封装到了BeanInfo中
        BeanInfo bi = Introspector.getBeanInfo(Student.class);
        //得到类中的所有的属性描述器
        PropertyDescriptor[] pds = bi.getPropertyDescriptors();
        System.out.println(pds.length);
        for(PropertyDescriptor pd:pds){
            System.out.println(pd.getName());
        }
    }
    @Test
    public void test2() throws Exception{
        Student s = new Student();
        PropertyDescriptor pd = new PropertyDescriptor("name", Student.class);
        Method m = pd.getReadMethod();//得到getName()方法
        String value = (String)m.invoke(s, null);
        System.out.println(value);
        Method m1 = pd.getWriteMethod();//得到setName()方法
        m1.invoke(s, "王云");//改变name的值
        System.out.println(s.getName());
    }
图片1.png

你可能感兴趣的:(2 内省)