Java 内省机制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 内省机制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2974字,纯文字阅读大概需要5分钟。
内容图文
一、内省
内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”,方法比较少,这些信息储存在类的私有变量中,通过set()、get()获得,如下所示:
1 public class Student { 2 public Student(){ 3 System.out.println("调用构造Student方法"); 4 } 5public Student(int age,String name){ 6this.age=age; 7this.name = name; 8 } 9privateint age; 10private String name; 11publicint getAge() { 12return age; 13 } 14publicvoid setAge(int age) { 15this.age = age; 16 } 17public String getName() { 18return name; 19 } 20publicvoid setName(String name) { 21this.name = name; 22 } 23 }
在类Person中有属性name, 那我们可以通过 getName,setName来得到其值或者设置新的值,通过getName/setName来访问userName属性,这就是默认的规则。Java JDK中提供了一套 API用来访问某个属性的 getter/setter 方法,这就是内省。
JDK内省类库:PropertyDescriptor类:
PropertyDescriptor类表示JavaBean类通过存储器导出一个属性。主要方法:
1. getPropertyType(),获得属性的Class对象;
2. getReadMethod(),获得用于读取属性值的方法;getWriteMethod(),获得用于写入属性值的方法;
3. hashCode(),获取对象的哈希值;
4. setReadMethod(Method readMethod),设置用于读取属性值的方法;
5. setWriteMethod(Method writeMethod),设置用于写入属性值的方法。
具体实例如下所示:
1 Student st = new Student(23,"崔颖"); 2 String propertyName = "age"; 3//1.通过构造器来创建PropertyDescriptor对象 4 PropertyDescriptor pd = new PropertyDescriptor("name", Student.class); 5 PropertyDescriptor pd2 = new PropertyDescriptor("age",Student.class); 6//2.通过该对象来获得写方法 7 Method method1= pd.getReadMethod(); 8 method2= pd2.getReadMethod(); 9//3.执行写方法10 Object object=method1.invoke(st); 11 Object object2 = method2.invoke(st); 12//4.输出对象字段的值13 System.out.println(object); 14 System.out.println(object2); 15/*//5.通过对象获得读方法 16 method = pd.getReadMethod(); 17 //6.执行读方法并定义变量接受其返回值并强制塑形 18 String name = (String) method.invoke(st, null); 19 //7.输出塑形后的值 20 System.out.println(name);*/21 }
在上面示例中,通过属性描述类获得读取属性以及写入属性的方法,进而可以对JavaBean的属性进行读取操作。
还有一种做法是通过类Introspector的getBeanInfo()方法获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的 getter/setter方法,然后我们就可以通过反射机制来调用这些方法。 我们又通常把javabean的实例对象称之为值对象(Value Object),因为这些bean中通常只有一些信息字段和存储方法,没有功能性方法,JavaBean实际就是一种规范,当一个类满足这个规范,这个类就能被其它特定的类调用。一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,通过去掉set方法前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小写。
1 public static void test2() throws Exception{ 2 Student student = new Student(); 3//1.通过Introspector来获取bean对象的beaninfo 4 BeanInfo bif = Introspector.getBeanInfo(Student.class); 5//2.通过beaninfo来获得属性描述器(propertyDescriptor) 6 PropertyDescriptor pds[] = bif.getPropertyDescriptors(); 7//3.通过属性描述器来获得对应的get/set方法 8for(PropertyDescriptor pd:pds){ 9//4.获得并输出字段的名字10 System.out.println(pd.getName()); 11//5.获得并输出字段的类型12 System.out.println(pd.getPropertyType()); 13if(pd.getName().equals("name")){ 14//6.获得PropertyDescriptor对象的写方法15 Method md = pd.getWriteMethod(); 16//7.执行写方法17 md.invoke(student, "sunfei"); 18 } 19 } 20//8.输出所赋值字段的值21 System.out.println(student.getName()); 22 }
原文:http://www.cnblogs.com/sunfie/p/4350941.html
内容总结
以上是互联网集市为您收集整理的Java 内省机制全部内容,希望文章能够帮你解决Java 内省机制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。