JAVA内省JavaBean(Introspector、BeanInfo和PropertyDescriptor) 您所在的位置:网站首页 内省的作用有 JAVA内省JavaBean(Introspector、BeanInfo和PropertyDescriptor)

JAVA内省JavaBean(Introspector、BeanInfo和PropertyDescriptor)

2024-06-15 08:45| 来源: 网络整理| 查看: 265

JavaBean是一个特殊的java类,主要用于传递数据信息 (在我的博客 android之SQLite项目分析中提到绘制表格时将读取数据库的数据写到了 一个Information类中一样,就是用到了利用javabean来存储数据的作用) 这种java类中的方法主要用于访问私有的字段 且方法名符合某种命名规则,下面看一个例子分析

第一步:先写个javabean类

public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 第二步:写个测试类

public class StudentTest { public static void main(String[] args)throws Exception { //method_1(); //method_2(); //method_3(); //method_4(); method_5(); } /* * (1)设置javabean有两种方式,这是第一种方式: * * 当你写好一个javabean类后,编译成.calss类后给别人用,这时别人根本不知道你的这个类有什么属性 * 这时就可以用这种方式了。 * 首先得到javabean中所有属性的描述,先调用Introspector类中的getBeanInfo()方法来获得BeanInfo的对象 * 然后由此对象调用getPropertyDescriptor()方法来获得javabean中所有属性的描述,并将它们存到一个数组中 * ,这样就可以遍历这个数组,判断以后就可以得到需要的那个属性了,看代码: * */ private static void method_1()throws Exception { //利用反射的方式得到Student类的一个对象 Student ss=Student.class.newInstance(); //得到BeanInfo对象。getBeanInfo()中的参数必须指定,你要获得谁的BeanInfo,就传入谁的字节码 BeanInfo beanInfo=Introspector.getBeanInfo(Student.class); //获得JavaBean中所以的属性,这里我们还不知道Student类这个javabean中到底有什么属性 PropertyDescriptor[] proDesptors=beanInfo.getPropertyDescriptors(); //好了这里就可以遍历了 for(PropertyDescriptor p:proDesptors) { //为了知道都与哪些属性,这里可以先打印在控制台看看 System.out.println(p.getName()); /* * 上面打印的属性信息下面就有用了,我们可以根据打印的属性名,做选择我们需要哪些属性 * 例如想获得的属性名和name一样 * * */ if(p.getName().equals("name")) { //这里就获得了我们要找的属性了,然后再通过反射的方式获取该属性的get和set方法 Method getMethod=p.getReadMethod();//获得get方法 Method setMethod=p.getWriteMethod();//获得set方法 //然后调用获得的set方法来设置属性的值 setMethod.invoke(ss, "张三"); //设置好后就上面获得的getMethod方法来查看值是否设置成功 //下面两种方法都行,因为get方法并不需要传入参数,所以可以是null或者不写 //System.out.println(getMethod.invoke(ss)); System.out.println(getMethod.invoke(ss,null)); } } } /* * 这时第二种方式 * 如果你把写好的javabean类,连.java都给别人的话,那么别人就很清楚这个javabean类中的具体属性了(例如age) * 那么这时就可以通过属性描述器Descriptor来直接获取 * */ public static void method_2()throws Exception { //利用反射的方式得到Student类的一个对象 Student ss=Student.class.newInstance(); //然后我们就可以得到需要设置的某个属性(例如age)的属性描述器 //参数分别是:属性,哪个类,即需要设置哪个类的哪个属性 PropertyDescriptor pd=new PropertyDescriptor("age", Student.class); Method setMethod=pd.getWriteMethod(); Method getMethod=pd.getReadMethod(); setMethod.invoke(ss, 23); System.out.println(getMethod.invoke(ss)); } /* * 操作javabean类,其实不用这么麻烦,我们可以直接使用BeanUtils工具包 * 使用BeanUtils工具包时,需要两个包commons-beanutils-1.8.3.jar、commons-logging-1.1.1.jar,看下工程目录(见图1): * 这个类中常用的类:BeanUtils、PropertyUtils、ConverUtils * */ public static void method_3()throws Exception { Student ss=new Student(); BeanUtils.setProperty(ss, "name", "王五"); BeanUtils.setProperty(ss, "age", 23); System.out.println(ss.getName()); System.out.println(ss.getAge()); } /* * 我们可以这样的想象下,一个类的属性,它有属性名和属性值,刚好存在一个映射关系,那么我们就可以 * 讲这些信息存放到一个Map集合当中了 * */ public static void method_4()throws Exception { Student ss=new Student(); Map maps=new HashMap(); maps.put("name", "水淼淼"); maps.put("age", "12"); //下面调用BeanUtils中的populate方法来设置值,参数分别是: //哪个对象设置值,存放键值的集合 BeanUtils.populate(ss, maps); System.out.println(ss.getAge()); System.out.println(ss.getName()); } /* * PropertyUtils * */ public static void method_5()throws Exception { Student ss=new Student(); PropertyUtils.setProperty(ss, "name", "水白白"); PropertyUtils.setProperty(ss, "age", 89); System.out.println(ss.getName()); System.out.println(ss.getAge()); } }

图1



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有