访问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的更多相关文章

  1. Java内省机制

    转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...

  2. 2-java内省机制(Introspector)

    来一个简单的示例吧 package com.my.test; import java.beans.BeanInfo; import java.beans.Introspector; import ja ...

  3. java内省机制及PropertyUtils使用方法

    背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...

  4. Java 内省机制

    一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...

  5. 就改了get,却不让我set?——Java内省机制的神奇行为举止一例

    [相关类库]org.apache.commons.beanutils.BeanUtils,提供对Java反射和自省API的包装,其中底层使用到了Java的内省方法.[内省的一般应用形式]通过类Intr ...

  6. java 内省(Introspector)

    开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性. 当然你也可以用反射来操作JavaB ...

  7. Java的内省机制

    我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就 ...

  8. 01-Introspector内省机制

    在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码 比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中 将http请求报文的数据 转换 ...

  9. 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的

    #### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...

随机推荐

  1. Winform用匿名方法新建线程的方法

    作用:1.将耗时的操作放在单独的线程,加快UI的响应速度.Thread t = new Thread(delegate() { parse.ParseDay(StockCode, FileName); ...

  2. phonegap 2.7 ios配置安装详细教程(2.9通用)

    原地址:http://www.cnblogs.com/yansi/archive/2013/05/14/3078222.html 在移动开发日益激烈的情况下我也不得不硬着头皮尝试下新鲜的html5的a ...

  3. SPOJ #2 Prime Generator

    My first idea was Sieve of Eratosthenes, too. But obviously my coding was not optimal and it exceede ...

  4. 剑指offer系列20--从上到下打印二叉树

    * 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印. * [思路]从根结点开始,先保存结点,再看根结点的左右结点有没有值. * 有,就将左右值放到集合中: * 根节点输出后,打印根 ...

  5. Python 处理多层嵌套列表

    >>> movies =[ "the holy grail", 1975,"terry jones",91, ["graham ch ...

  6. SVN中的Branches分支以及Merge 应用举例

    come from: http://www.360doc.com/content/12/0816/19/1317564_230547958.shtml 创建Branch分支或者Tag标签 当按照推荐的 ...

  7. 第一次正式java web开发项目的总结

    去年下半年到现在,因为公司人员流动,也有好几个新进的员工分给我来带领,也有刚从学校出来的,在和他们交流的过程中,不由的想起自己刚刚进入这行的一些感想. 记得自己当初写过一篇总结的,我想这些对于刚出校门 ...

  8. sqlite数据库执行full outer join

    sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...

  9. Spark运行流程概述

    Application 指用户编写的Spark应用程序,其中包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码. Driver Spark中的Driver即运行上述Ap ...

  10. CE_现金的利息设定和计算(案例)

    2014-07-15 Created By BaoXinjian 一.摘要 存款利率指客户按照约定条件存入银行帐户的货币,一定时间内利息额同贷出金额即本金的利率.有活期利率和定期利率之分,有年/月/日 ...