后台(32)——内省Introspector

简介: 探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制Android多分...

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明


内省(Introspector)简介

内省Introspector是一种特殊的反射技术,常用于操作JavaBean。


字段和属性以及JavaBean

先来看我们经常写的一种类:

/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
package cn.com;

public class Girl {

    private String name;
    private int age;
    private int bust;
    private int waist;
    private int hip;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getBust() {
        return bust;
    }
    public void setBust(int bust) {
        this.bust = bust;
    }
    public int getWaist() {
        return waist;
    }
    public void setWaist(int waist) {
        this.waist = waist;
    }
    public int getHip() {
        return hip;
    }
    public void setHip(int hip) {
        this.hip = hip;
    }

}

在该类中,我们定义了几个字段并且为它们生成了对应的getXXX()和setXXX()。在很多时候我们喜欢把name,age,waist这些东西叫属性。其实,更加规范的的说法应该是:把有getXXX()或者setXXX()的变量叫做属性,把没有getXXX()或者setXXX()的变量称作字段。

很多时候,我们会看到这样的类:里面只有属性及其对应的get和set方法,这样的类也被称为JavaBean,比如此处的Girl类。


内省Introspector的使用方式

在此介绍与内省Introspector相关的操作

    /**
     * 本文作者:谷哥的小弟
     * 博客地址:http://blog.csdn.net/lfdfhl
     */
    private static void testPropertyDescriptor1() throws IntrospectionException{
        BeanInfo beanInfo = Introspector.getBeanInfo(Girl.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.println(propertyDescriptor.getName());
        }
    }

在此,我们利用属性描述器PropertyDescriptor获取Bean的属性,结果如下:

age
bust
class
hip
name
waist

嗯哼,发现了么?我们不但获取到了Gril类的五个属性还获取到了它的父类Object的属性class。

继续来看下面的例子:

    /**
     * 本文作者:谷哥的小弟
     * 博客地址:http://blog.csdn.net/lfdfhl
     */
    private static void testPropertyDescriptor2() throws Exception{
        Girl girl = new Girl();
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Girl.class);
        Method setter = propertyDescriptor.getWriteMethod();
        setter.invoke(girl, 18);
        Method getter = propertyDescriptor.getReadMethod();
        Object age = getter.invoke(girl, null);
        System.out.println("age="+age);
    }

输出结果:

age=18

代码解析如下:

  • 得到与属性对应的属性描述器PropertyDescriptor,请参见代码第7行
  • 得到该属性的set方法后为对象赋值,请参见代码第8—9行
  • 得到该属性的get方法后取出属性值,请参见代码第10—11行

Beanutils

BeanUtils是Apache提供的操作JavaBean的工具,它使用简单,操作方便。如有需要,可至其官方网站详细了解;在此不再赘述。

相关文章
|
7月前
|
前端开发 API 开发者
Javaweb之前后台分离开发介绍的详细解析
2.1 前后台分离开发介绍 在之前的课程中,我们介绍过,前端开发有2种方式:前后台混合开发和前后台分离开发。 前后台混合开发,顾名思义就是前台后台代码混在一起开发,如下图所示:
101 0
|
Java
Java反射机制动态操作
Java反射机制动态操作
58 0
|
7月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
87 4
|
4月前
|
开发者 安全 UED
JSF事件监听器:解锁动态界面的秘密武器,你真的知道如何驾驭它吗?
【8月更文挑战第31天】在构建动态用户界面时,事件监听器是实现组件间通信和响应用户操作的关键机制。JavaServer Faces (JSF) 提供了完整的事件模型,通过自定义事件监听器扩展组件行为。本文详细介绍如何在 JSF 应用中创建和使用事件监听器,提升应用的交互性和响应能力。
41 0
|
4月前
|
存储 运维 前端开发
中后台前端开发问题之定义编排对象如何解决
中后台前端开发问题之定义编排对象如何解决
28 0
|
XML NoSQL Java
干掉 CRUD!这个API开发神器效率爆炸,无需定义MVC类!!
magic-api 能够只通过 UI 界面就能完成简单常用的接口开发,能够支持市面上多数的关系性数据库,甚至还支持非关系性数据库 MongoDB。 通过 magic-api 提供的 UI 界面完成接口的开发,自动映射为 HTTP 接口,无需定义 Controller、Service、Dao、Mapper、XML、VO 等 Java 对象和相关文件! 该项目已经有上千家公司使用,上万名开发者使用,并有上百名程序员提交建议,20+ 贡献者,是非常值得信赖的项目!
|
存储 Go
第三十章 使用系统监视器 - 编写用户定义的应用程序监视器类
第三十章 使用系统监视器 - 编写用户定义的应用程序监视器类
114 0
|
安全 C++ Windows
C++调用外部应用程序的方法的整理总结(常用)
一、三个SDK函数:  WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
3038 0
|
Java 数据库
内省机制(操作javaBean的信息)
内省机制(操作javaBean的信息)
117 0
内省机制(操作javaBean的信息)
|
Java 数据库连接 数据库
编写Java程序,在维护英雄数据的业务过程中复用数据库操作封装类
编写Java程序,在维护英雄数据的业务过程中复用数据库操作封装类
117 0