内省访问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());

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值