访问JavaBean属性的两种方式

1)直接调用bean的setXXX或getXXX方法;

2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:

  a)通过PropertyDescriptor类操作Bean的属性;

  b)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

  1. public class Person {
  2. private String name; // 字段
  3. private String password;// 字段
  4. private Integer age;// 字段
  5. // 对字段添加了get或者set方法了,才叫做属性
  6. public String getXxx() {
  7. return "aa";
  8. }
  9. setter/getter
  10. }

以下通过内省机制来操作Person对象。

获得类所有的属性

  1. @Test
  2. public void test1() throws Exception {
  3.  
  4. BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
  5. PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); //得到属性描述符
  6.  
  7. for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
  8. System.out.println(propertyDescriptor.getName());
  9. }
  10. }

执行结果:age  class  money  name  password  xxx

包括了从父类中继承过来的属性class

获得本类中的所有属性

  1. @Test
  2. public void test2() throws Exception {
  3. // 剔除Object继承过来的属性
  4. BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class);
  5. PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
  6.  
  7. for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
  8. System.out.println(propertyDescriptor.getName());
  9. }
  10. }

操纵bean的指定属性

  1. @Test
  2. public void test3() throws Exception {
  3. Person person = new Person();
  4.  
  5. PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Person.class);
  6.  
  7. // 得到属性的写方法,为属性赋值
  8. Method setAgeMethod = propertyDescriptor.getWriteMethod(); // setAge
  9. setAgeMethod.invoke(person, 34);
  10.  
  11. // 获取属性的值
  12. System.out.println(person.getAge());
  13. Method getAgeMethod = propertyDescriptor.getReadMethod();
  14. System.out.println(getAgeMethod.invoke(person, null));
  15. }

获取当前操作的属性的类型

  1. @Test
  2. public void test4() throws Exception {
  3. PropertyDescriptor propertyDescriptor = new PropertyDescriptor("money",Person.class);
  4.  
  5. Class<?> propertyType = propertyDescriptor.getPropertyType();
  6. System.out.println(propertyType);
  7. }

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. Android 打包签名 从生成keystore到完成签名 -- 转

    首先,我们需要一个keystore,当然已经有了的话就不用这一步了:cmd下:进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这个文件C ...

  2. Android的onCreateOptionsMenu()创建菜单Menu详解

    Android一共有三种形式的菜单:            1.选项菜单(optinosMenu)            2.上下文菜单(ContextMenu)            3.子菜单(s ...

  3. 【转】Asp.Net MVC3 简单入门详解过滤器Filter

    原文地址:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html 前言 在开发大项目的时候总会有相关的AOP面向切面编程的组 ...

  4. Js获取当前日期时间

    Js获取当前日期时间 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4 ...

  5. Learning Puppet — Manifests

    Begin In a text editor — vim, emacs, or nano — create a file with the following contents and filenam ...

  6. VoLTE、呼叫等待(保持)

    VoLTE 的出现是手机通话的革命,VoLTE带来更好通话质量,更快的接通时间,接近0掉线这些特点,还可以一边通话一边上网,一方面VoLTE需要运营商的支持,另外一方面也需要手机终端的支持. 什么手机 ...

  7. HTML5 中已经可以用 Ajax 上传文件了,而且代码非常简单,借助 FormData 类即可发送文件数据。

    <?phpif (isset($_POST['upload'])) { var_dump($_FILES); move_uploaded_file($_FILES['upfile']['tmp_ ...

  8. h264 流、帧结构

    H264元素的分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 在H.264 中,句法元素共被组织成  序列.图像.片 ...

  9. Ubuntu下面配置问题

    下开启root登陆 sudo passwd root 输入两次新密码 就能在虚拟终端下用 root登陆了,或者 su到root用户了. ctrl + alt +t 弹出终端 ctrl+ alt+ f7 ...

  10. 【MySQL】索引长度的一些限制

    有同学问到InnoDB的索引长度问题,简单说几个tips. MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制. myisam表,单列索引,最大长度不能超过 1000 ...