`
sungang_1120
  • 浏览: 323844 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

JAVA反射机制 通过反射对javabean进行内省操作

 
阅读更多

bean类

package com.sg.bean;

public class TestBeanReflex {
    private String x;
    private String y;
    public TestBeanReflex(String x, String y) {
        this.x = x;
        this.y = y;
    }
    public String getX() {
        return x;
    }
    public void setX(String x) {
        this.x = x;
    }
    public String getY() {
        return y;
    }
    public void setY(String y) {
        this.y = y;
    }
    }

 
 

 

测试类

package com.sg.bean;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class IntroSpectorTest {
    public static void main(String[] args) throws Exception {
        TestBeanReflex tbr = new TestBeanReflex("3", "5");

        String propertyName = "x";
        String value = "7";
        //获取bean的属性值
        Object obj = getProperty(tbr, propertyName);
        System.out.println(obj);
        //可以修改bean属性的值
        setProperty(tbr, propertyName, value);
        System.out.println(tbr.getX());
       
    }

    private static void setProperty(Object tbr, String propertyName,
            Object value) throws IntrospectionException, IllegalAccessException,
            InvocationTargetException {
        PropertyDescriptor pd = new PropertyDescriptor(propertyName, tbr.getClass());
        Method method = pd.getWriteMethod();
        method.invoke(tbr, value);
    }

    private static Object getProperty(Object tbr, String propertyName)
            throws IntrospectionException, IllegalAccessException,
            InvocationTargetException {
        /*PropertyDescriptor pd = new PropertyDescriptor(propertyName,
                tbr.getClass());
        Method method = pd.getReadMethod();
        Object obj = method.invoke(tbr);*/
       
        BeanInfo beanInfo  = Introspector.getBeanInfo(tbr.getClass());
        //getPropertyDescriptors因为此方法返回的是bean的所有变量
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        Object obj  = null;
        for (PropertyDescriptor pd : pds) {
            //通过判断可以只获取你想要的
            if (pd.getName().equals(propertyName)) {
                Method method = pd.getReadMethod();
                obj = method.invoke(tbr);
                break;
            }
        }
        return obj;
    }
}

 

分享到:
评论

相关推荐

    类的反射机制您的网络连接,请

    Java反射API主要包括以下几个核心类: 1. **Class类**:每个类在JVM中都有一个对应的Class对象,它包含了类的所有信息。我们可以通过`Class.forName()`或者对象的`getClass()`方法来获取对应的Class对象。 2. **...

    JavaBean与反射

    在Java中,所有关于反射的操作都在`java.lang.reflect`包下进行。使用反射的基本步骤包括: 1. **获取Class对象**:首先,需要获取目标类的`Class`对象,这是反射操作的起点。 2. **查询成员信息**:使用`Class`...

    minimalcode-reflect:JavaBean 的简约反射和内省功能

    总的来说,`minimalcode-reflect`是一个专注于JavaBean的反射和内省的框架,它简化了对JavaBean的常规操作,同时也提供了对字节码生成、注解处理和类型操作的支持,为Java开发带来了便利。通过深入理解和使用这个库...

    Java基础学习43.pdf

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。在Java基础学习中,理解并掌握反射是非常关键的一步,因为这不仅可以帮助你深入理解Java的内在机制,还能提升你在...

    Java 内省(Introspector)深入理解

    Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。这个特性对于开发人员来说非常有用,因为它允许程序动态地检查和修改对象的状态,而不必了解对象的具体实现细节。...

    Java 内省introspector相关原理代码解析

    Java 内省(Introspection)是Java提供的一种机制,允许程序在运行时检查对象的属性和方法。...然而,内省也有一些缺点,如性能开销较大,因为每次调用都需要反射操作,所以在对性能要求较高的场景下需谨慎使用。

    Java基础学习44.pdf

    例如,`BeanHandler`实现了`ResultSetHandler`接口,它可以通过反射机制创建指定类的实例,并使用`ResultSet`中的数据填充JavaBean的属性。`MapHandler`则将结果集转换为Map集合,其中键是列名,值是列对应的值。...

    《安全编程技术》教学大纲.docx

    4. **内省和JavaBean原理分析**:内省是Java中用于探测对象属性和方法的技术,本章会介绍JavaBean的基本操作及其内省的复杂应用,利用`BeanUtils`工具进行操作。 5. **注解的了解和应用**:注解是元数据的一种形式...

    Java基础知识加强PPT

    本PPT旨在帮助对Java有一定基础的开发者进行复习和提升,通过简洁而全面的讲解,促进对关键知识点的理解和应用。 首先,我们来看看Eclipse的使用技巧。Eclipse是一款强大的集成开发环境(IDE),对于Java开发来说至...

    Java基础加强,成就java高手

    课程涵盖了多个关键知识点,包括Eclipse的使用技巧、静态导入、可变参数、增强for循环、基本数据类型的自动拆箱与装箱、枚举、反射、JavaBean内省、BeanUtils工具包、注解、泛型、类加载器、代理以及线程并发库等。...

    30天轻松掌握javaweb 课堂笔记完整版

    - 内省是指通过反射机制操作JavaBean的属性。 - 泛型提供了编译时类型安全检测机制,消除类型转换。 8. **注解(Annotation)**: - 注解是Java中的元数据,用于提供代码的附加信息。 - 讲解了JDK的元注解、...

    java常用第三方软件包大全_.docx

    7. **Commons-beanutils**:通过反射和内省操作JavaBean,简化属性的获取和设置。 8. **Commons-codec**:包含多种编码算法,如Base64、Hex、URL编码等。 9. **Commons-collections**:提供了对Java集合框架的扩展...

    json-lib-2.4&dependencies jars.zip

    4. `commons-beanutils.jar`: Apache Commons BeanUtils库简化了JavaBean操作,通过反射和 introspection(内省)技术,使得操作JavaBean属性更加便捷,这在处理JSON到JavaBean的映射时非常有用。 5. 可能还会有...

    java_学习方向Microsoft Word 文档 (2)

    6. **BeanUtils工具**:Apache Commons提供的库,简化JavaBean操作。 7. **注解**:元数据,提供编译时和运行时信息,用于代码的自我描述。 8. **泛型**:提高类型安全,避免强制类型转换,减少运行时错误。 9. **类...

    张孝祥Java基础加强ppt.ppt

    eclipse的使用技巧 静态导入 可变参数与for循环增强 基本数据类型的自动拆箱与装箱 枚举 反射 JavaBean内省 beanutils工具包 注解 泛型 类加载器 代理 线程并发库

    java基础加强ppt(张孝祥版_黎活明版)

    java基础加强ppt(张孝祥版_黎活明版)eclipse的使用技巧、静态导入、可变参数与for循环增强、基本数据类型的自动拆箱与装箱、枚举、反射、JavaBean内省、beanutils工具包、注解、泛型、类加载器、代理、线程并发库

    JAVAEE笔记

    - **项目创建与管理**:通过File > New > Java Project可以创建新的Java项目,并对项目结构进行管理。此外,还可以利用Maven或Gradle等工具进行项目的构建和依赖管理。 - **代码编写与辅助**:Eclipse内置了强大的...

Global site tag (gtag.js) - Google Analytics