首页 > 代码库 > java内省机制Introspector
java内省机制Introspector
访问JavaBean属性的两种方式
1)直接调用bean的setXXX或getXXX方法;
2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:
a)通过PropertyDescriptor类操作Bean的属性;
b)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
public class Person { private String name; // 字段 private String password;// 字段 private Integer age;// 字段 // 对字段添加了get或者set方法了,才叫做属性 public String getXxx() { return "aa"; } setter/getter}
以下通过内省机制来操作Person对象。
获得类所有的属性
@Test public void test1() throws Exception { BeanInfo beanInfo = Introspector.getBeanInfo(Person.class); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); //得到属性描述符 for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { System.out.println(propertyDescriptor.getName()); } }
执行结果:age class money name password xxx
包括了从父类中继承过来的属性class
获得本类中的所有属性
@Test public void test2() throws Exception { // 剔除Object继承过来的属性 BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { System.out.println(propertyDescriptor.getName()); } }
操纵bean的指定属性
@Test public void test3() throws Exception { Person person = new Person(); PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Person.class); // 得到属性的写方法,为属性赋值 Method setAgeMethod = propertyDescriptor.getWriteMethod(); // setAge setAgeMethod.invoke(person, 34); // 获取属性的值 System.out.println(person.getAge()); Method getAgeMethod = propertyDescriptor.getReadMethod(); System.out.println(getAgeMethod.invoke(person, null)); }
获取当前操作的属性的类型
@Test public void test4() throws Exception { PropertyDescriptor propertyDescriptor = new PropertyDescriptor("money",Person.class); Class<?> propertyType = propertyDescriptor.getPropertyType(); System.out.println(propertyType); }
java内省机制Introspector
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。