JAVA内省JavaBean(Introspector、BeanInfo和PropertyDescriptor)
2012-12-06 20:24
399 查看
JavaBean是一个特殊的java类,主要用于传递数据信息
(在我的博客 android之SQLite项目分析中提到绘制表格时将读取数据库的数据写到了
一个Information类中一样,就是用到了利用javabean来存储数据的作用)
这种java类中的方法主要用于访问私有的字段
且方法名符合某种命名规则,下面看一个例子分析
第一步:先写个javabean类
第二步:写个测试类
图1
(在我的博客 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<String,String> maps=new HashMap<String, String>(); 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
相关文章推荐
- 【spring学习前奏】JavaBean内省Introspector以及BeanInfo
- 内省(一)之Introspector、BeanInfo、PropertyDescriptor
- Java--introspector(内省)操作bean属性
- 【Java进阶】内省IntroSpector操作JavaBean和Apache-commons-dbutils对内省的使用
- 使用Introspector(Java内省机制)实现Map转换为JavaBean
- 内省IntroSpector与JavaBean
- 黑马程序员---javaBean & introspector(内省)
- Java高新技术之JavaBean(内省 IntroSpector)
- Java学习笔记-JavaBean-内省(Introspector)
- 内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法
- 【JavaEE】Java内省Introspector、PropertyDescriptor与JavaBean
- java基础加强--JavaBean和内省Introspector
- JAVA反射与内省(Introspector)
- [学习笔记]Java内省机制(JavaBean)
- Java反射与内省(Introspector)
- JAVA内省(Introspector)
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- JSP九大内置对象&javabean&内省
- JAVA的内省机制(introspector)与反射机制(reflection)
- POJO和javabean的区别 POJO PO VO javabean的概念