`
zhangwei_david
  • 浏览: 476178 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 之 PropertyDescriptor

    博客分类:
  • Java
 
阅读更多

   PropertyDescriptor 描述了一个JavaBean 属性的一对访问方法即 getter和setter。

常用的构造方法是PropertyDescriptor(String propertyName,Class<?> beanClass);

propertyName就是属性的名称,beanClass就是这个属性对应属于哪个对象的Class.

/**
 *
 * @author zhangwei_david
 * @version $Id: PropertyDescriptorDemo.java, v 0.1 2015年5月25日 下午8:17:59 zhangwei_david Exp $
 */
public class PropertyDescriptorDemo {

    /**
     *
     * @param args
     * @throws IntrospectionException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static void main(String[] args) throws IntrospectionException, IllegalAccessException,
    IllegalArgumentException, InvocationTargetException {
        // bean的实例
        Form form = new PropertyDescriptorDemo().new Form();
        // 创建属性name 的PropertyDescriptor
        PropertyDescriptor pd = new PropertyDescriptor("name", form.getClass());
        // 获取属性的setter方法
        Method writer = pd.getWriteMethod();
        // 反射调用setter方法设置值
        writer.invoke(form, "TEST");
        // 输入setter以后的结果
        System.out.println(form.getName());
        // 获取getter方法
        Method reader = pd.getReadMethod();
        // 获取属性值
        String value = (String) reader.invoke(form);
        // 获取属性
        String name = pd.getName();

        System.out.println(name + "=" + value);

    }

    /**
     *
     *  测试表单
     *
     * @author zhangwei_david
     * @version $Id: PropertyDescriptorDemo.java, v 0.1 2015年5月25日 下午8:40:29 zhangwei_david Exp $
     */
    class Form {
        /**属性name**/
        private String name;

        /**
         * Getter method for property <tt>name</tt>.
         *
         * @return property value of name
         */
        public String getName() {
            return name;
        }

        /**
         * Setter method for property <tt>name</tt>.
         *
         * @param name value to be assigned to property name
         */
        public void setName(String name) {
            this.name = name;
        }

    }
}

 

输出的结果是:

TEST
name=TEST

可以发现,正确调用了setter和getter方法,如果将Form中的getter方法删除后运行的结果是什么呢?

Exception in thread "main" java.beans.IntrospectionException: Method not found: setName
	at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:110)
	at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
	at com.cathy.demo.reflect.PropertyDescriptorDemo.main(PropertyDescriptorDemo.java:32)

 

 

0
0
分享到:
评论

相关推荐

    Java通过PropertyDescriptor反射调用set和get方法

    本文将详细介绍如何使用`PropertyDescriptor`通过反射来调用Java对象的`set`和`get`方法。 首先,让我们了解`PropertyDescriptor`。`PropertyDescriptor`类代表了一个JavaBean的属性,它包含了该属性的`get`和`set`...

    Java反射中java.beans包学习总结.docx

    `PropertyEditor`接口是JavaBeans的核心组件之一,用于处理JavaBean的属性转换。它允许我们将字符串与其他类型的数据之间进行转换。例如,在给定的例子中,`DodeDOEditor`类扩展了`PropertyEditorSupport`,并实现...

    Java 反射创建get set方法及反射方法的调用

    ### Java反射创建get set方法及反射方法的调用 #### 概述 在Java编程语言中,反射(Reflection)是一种强大的技术,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。本文将...

    java基础类库文件rt.jar

    Java基础类库,也就是Java doc里面看到的所有的类的class文件。

    java深度复制源代码

    - **反射机制**:该工具类大量使用了Java反射API(如`Introspector.getBeanInfo()`、`PropertyDescriptor`等)来获取和设置JavaBean的属性。 - **泛型**:使用了泛型`&lt;T&gt;`,使得该工具类可以应用于任意类型的...

    openbean.jar AndroidStudio 导入java.beans.*

    在Android开发过程中,有时我们需要利用Java的一些特定库来扩展应用的功能。`openbean.jar`是一个包含JavaBeans组件的库,特别适用于在Android Studio项目中使用`java.beans`包中的类和接口。`java.beans`包提供了...

    Java常用工具类包包含各种常用开发工具

    - `java.beans`包提供了诸如`PropertyDescriptor`和`BeanInfo`等类,用于获取和设置Java Bean的属性值。 - `org.springframework.beans.BeanUtils`是Spring框架的一部分,提供了更强大和灵活的Bean操作,如复制...

    java.beans.*

    `java.beans.PropertyDescriptor` 类用于封装 Java 对象的属性,提供了获取和设置属性值的方法。 3. **Event**: 事件是 Bean 中发生的有意义的事情。`java.beans.EventSetDescriptor` 描述了一个事件集,而 `java....

    Java反射与内省-PPT

    `java.beans`包中的`PropertyDescriptor`、`MethodDescriptor`等类可以帮助我们获取Bean的属性和方法信息,实现对Bean对象的读写操作,这对于构建用户界面和数据绑定场景非常方便。 总的来说,Java反射与内省提供了...

    良葛格java jdk 5.0学习笔记.rar

    8. **内省增强**:JavaBeans的内省API在Java 5.0中得到增强,使得反射操作更加方便,例如通过`PropertyDescriptor`和`Field`可以直接访问和修改对象属性。 9. **并发改进**:Java 5.0引入了`java.util.concurrent`...

    「一入 Java 深似海 」系列课程 - 第七期 第二节《Java Beans》1

    为了更好地理解和使用 Java Beans,你需要熟悉相关的 API,如 `java.beans` 包中的类和接口,例如 `PropertyDescriptor`、`EventSetDescriptor` 和 `Introspector`。同时,了解如何实现事件监听器接口(如 `...

    JAVA的内省机制(introspector)与反射机制(reflection).docx

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; public class myBeanIntrospector { public myBeanIntrospector() { try { // 实例化一个 Bean bean beanObj = new bean(); // ...

    Java反射中java.beans包学习总结

    java.beans包主要包含了四个主要组件:BeanInfo、PropertyDescriptor、PropertyEditor和VetoableChangeSupport。其中,BeanInfo是JavaBean的元数据,PropertyDescriptor用来描述JavaBean的属性,PropertyEditor用来...

    openbeans1.0.zip

    //import java.beans.PropertyDescriptor; import com.googlecode.openbeans.BeanInfo; import com.googlecode.openbeans.IntrospectionException; import com.googlecode.openbeans.Introspector; import ...

    Java 内省(Introspector)深入理解

    内省的核心在于Java Beans API,其中包括`PropertyDescriptor`类。`PropertyDescriptor`代表了JavaBean的一个属性,它可以访问和修改该属性的值。以下是一些关键方法: 1. `getPropertyType()`:返回属性对应的`...

    Java基础学习44.pdf

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。为了在IT行业中找到一份工作,熟练掌握Java基础知识至关重要。这份“Java基础学习44.pdf”资源旨在帮助初学者快速掌握Java的核心概念,特别...

    java bean 与 Web Form表单如何实现自动装配

    这可以通过`java.beans.PropertyDescriptor`来实现。`PropertyDescriptor`可以获取到一个JavaBean的所有公开的属性名称和它们的类型。这样,我们就有了一个Bean属性的列表,用于后续的匹配。 然后,将表单域的名称...

    java技术规范[参照].pdf

    这份规范自发布之日起,适用于所有在建的软件项目和研发中的软件产品。规范通过“要”、“考虑”、“避免”和“不要”四个词汇,明确了不同程度的遵循标准。 **标识符命名规范** 1. **命名风格** - **...

    Java中的内省与反射.doc

    反射最典型的应用场景之一是在需要动态扩展功能的程序中。比如,假设有一个应用程序支持动态加载新的功能模块,每个功能模块都是一个具体的类,通过反射可以根据类名动态地创建这些功能模块的实例,并调用其中的方法...

    Java实现不同的类的属性之间相互赋值

    Java实现不同的类的属性之间相互赋值 在 Java 中,实现不同的类的属性之间相互赋值是一种非常常见的操作,特别是在读写数据库的时候。这篇文章将讲解如何使用 Java 实现不同的类的属性之间相互赋值。 在开发过程中...

Global site tag (gtag.js) - Google Analytics