内省访问JavaBean属性的两种方法

内省的概述 (Introspector):
当Java运行时可检查自身,Java 程序中询问它的一个对象属于何类,然后检查该类构成。它能找出构成该类的所有属性及方法的名称和数据类型。
对一个 Bean 类来讲,可以没有属性,但是只要有 getter/setter 方法中的其中一个属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
但是只要有 getter/setter 方法中的其中一个,那么 Java 的内省机制就会认为存在一个属性,比如类中有方法 setMobile ,那么就认为存在一个 mobile 的属性,这样可以方便我们把 Bean 类通过一个接口来定义而不用去关心具体实现,不用去关心 Bean 中数据的存储。比如我们可以把所有的 getter/setter 方法放到接口里定义,但是真正数据的存取则是在具体类中去实现,这样可提高系统的扩展性。

2.内省访问JavaBean属性的两种方式:
1.通过PropertyDescriptor类操作Bean的属性
例:
@Test
public void test1()throws Exception{

Student st = new Student();

//1通过构造器 创建 PropertyDescriptor对象
PropertyDescriptor pd = new PropertyDescriptor("age", Student.class);

//2写操作
Method md = pd.getWriteMethod();
md.invoke(st, 120);
System.out.println(st.getAge());

//3读操作
md = pd.getReadMethod();
int value = (Integer)md.invoke(st, null);
System.out.println(value);

}
}

2、通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取
例:
@Test
public void test() throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Student st = new Student();

// 1、通过Introspector类获得Bean对象的 BeanInfo,
BeanInfo entity = Introspector.getBeanInfo(Student.class);

// 2、然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor )
PropertyDescriptor pdrs[] = entity.getPropertyDescriptors();

// 3、通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,
  for (PropertyDescriptor pd : pdrs) {
  System.out.println(pd.getName());

  System.out.println(pd.getShortDescription());
  System.out.println(pd.getDisplayName());

  if (pd.getName().equals("age")) { 
  Method md = pd.getWriteMethod();
  md.invoke(st, 12);
}
  //获取属性的类型
  System.out.println(pd.getName()+" "+pd.getPropertyType());

}
  System.out.println(st.getAge());

}

你可能感兴趣的:(bean,mobile)