Java内省
来源:互联网 发布:图像算法工程师无经验 编辑:程序博客网 时间:2024/05/12 22:16
一,为什么使用内省
开发框架时,经常使用到java对象的属性来封装程序的数据,每次使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
二,Java对象中的属性是由对象的get/set方法决定的
package cn.cyy.introspector;public class Person { private String name; private int age; private String password; public String getAb(){ return null; } 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 String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
此JavaBean有五个属性,分别为Ab、name、age、password、class。
get或者set方法算是一个属性,class是从父类继承过来的属性。
三,内省访问JavaBean属性有两种方式:
1,通过PropertyDescriptor类操作Bean的属性
2,通过Introspector类获取Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的get或者set方法,然后通过反射机制来调用这些方法。
package cn.cyy.introspector;import java.beans.BeanDescriptor;import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import org.junit.Test;//使用内省API操作bean的属性public class Demo1 { //使用PropertyDescriptor,操纵bean的指定属性 @Test public void test2() throws Exception{ Class clazz = Class.forName("cn.cyy.introspector.Person");//得到person类 Object obj = clazz.newInstance();//创建person类 PropertyDescriptor pd = new PropertyDescriptor("name", clazz);//创建name属性的属性描述器 Method method = pd.getWriteMethod();//为person的name属性赋值 method.invoke(obj, "cyy"); System.out.println(pd.getPropertyType()); System.out.println(pd.getReadMethod().invoke(obj, null)); } //使用Introspector类操作Bean属性 @Test public void test1() throws Exception{ Class clazz = Class.forName("cn.cyy.introspector.Person"); BeanInfo info = Introspector.getBeanInfo(clazz,Object.class);//得到bean自己的属性 BeanDescriptor bd = info.getBeanDescriptor(); bd.setValue("name", "cyy"); bd.setValue("age", 18); System.out.println(bd.getValue("name")+":"+bd.getValue("age")); PropertyDescriptor[] pds = info.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { System.out.println(pd.getName()); } }}
0 0
- JAVA 内省
- java 内省
- java 内省
- Java内省
- java内省
- java内省
- java--内省
- Java内省
- java内省
- Java内省
- java--内省
- java内省
- java内省
- Java内省
- java内省
- Java内省
- Java内省
- java-内省
- view的事件分发机制
- 三角形类
- 【教程】Mac使用xcode编写连接mysql的C程序
- 2015年总结
- One-Hot Encoding与类别特征处理
- Java内省
- CentOS 7 安装Nginx-1.9.2
- GMAP.NET 画直线
- jQuery判断元素是否存在方法
- Introduction to Sound Programming with ALSA
- Bind-9.6.0-P1源代码分析之一:整体架构(初稿)
- 三角形类
- Springmvc + mongodb + js 分页显示数据
- 深入理解Java 8 Lambda