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

普通的使用java反射内省以及使用BeanUtils工具包对javaBean进行操作

 
阅读更多


/**
 * 使用beanUtils工具包  需要导入第三方jar
 * commons-beanutils-1.8.3.jar
 * commons-logging-1.1.1.jar
 */


package com.sg.reflex.test;

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;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

import com.sg.bean.TestBeanReflex;

public class TestNeiXing {

    public static void main(String[] args)throws Exception {
        TestBeanReflex br = new TestBeanReflex("2", "5");
       
        String propertyName = "x";
        String returnValue = getProperty(br, propertyName);
        System.out.println(returnValue);
        Object value = "3";
        setProperty(br, propertyName, value);
        System.out.println(br.getX());
       
        /**
         * 通过BeanUtils操作获取bean属性的值  可以自动将参数类型转换成bean类对应参数的类型
         */
        System.out.println(BeanUtils.getProperty(br, propertyName));
        System.out.println(BeanUtils.getProperty(br, propertyName).getClass().getName());//java.lang.String
        /**
         * 通过BeanUtils这是bean属性的值
         */
        BeanUtils.setProperty(br, propertyName, "5");
        System.out.println(br.getX());
        /**
         * 通过BeanUtils操作bean属性的级联操作
         */
        BeanUtils.setProperty(br, "brithDay.time", "111");
        System.out.println(BeanUtils.getProperty(br,"brithDay.time"));//结果111
        /**
         * beanUtils将一个bean转换成一个map对象
         */
        Map map = BeanUtils.describe(br);
        /*Iterator iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            String key = (String)iterator.next();
            map.get(key);
        }
       
        Set set =  map.keySet();
        for(Object object : set){
            System.out.println("key : "+object + "value : " + map.get(object));
        }*/
        /**
         * PropertyUtils也具有同样的功能  但是参数值  要与bean的属性的类型一致
         */
        PropertyUtils.setProperty(br, "z", 9);
        System.out.println(BeanUtils.getProperty(br, "z"));//
        System.out.println(BeanUtils.getProperty(br, "z").getClass().getName());//
    }
   
   

    public static void setProperty(TestBeanReflex br, String propertyName,
            Object value) throws IntrospectionException,
            IllegalAccessException, InvocationTargetException {
        PropertyDescriptor descriptor = new PropertyDescriptor(propertyName, br.getClass());
        Method method = descriptor.getWriteMethod();
        method.invoke(br, value);
    }

    public static String getProperty(TestBeanReflex br, String propertyName)
            throws IntrospectionException, IllegalAccessException,
            InvocationTargetException {
        /*PropertyDescriptor descriptor = new PropertyDescriptor(propertyName, br.getClass());
        Method method = descriptor.getReadMethod();
        String returnValue = (String)method.invoke(br);
        return returnValue;*/
        //第二种操作
        //获取那个javaBean的所有信息
        BeanInfo beanInfo =  Introspector.getBeanInfo(br.getClass());
        //获取那个javaBean的所有属性的信息
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        String returnValue = null;
        //遍历所有的属性
        for(PropertyDescriptor pd : pds){
            //获取属性的名字  判断是否和传入的相等
            if (pd.getName().equals(propertyName)) {
                //如果相等就获取它的get方法
                Method method = pd.getReadMethod();
               
                returnValue = (String)method.invoke(br);
                break;
            }
        }
        return returnValue;
    }
   
   
   
}

 

分享到:
评论

相关推荐

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

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

    Java基础加强,成就java高手

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

    张孝祥Java基础加强ppt.ppt

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

    Java基础知识加强PPT

    `BeanUtils`工具包提供了方便的方法来操作JavaBean。 注解(Annotation)是另一种元数据形式,用于提供有关代码的信息,如元编程、编译时验证和运行时处理。注解可以自定义,也可以使用Java内置的注解,如`@...

    commons-beanutils-1.8.2.jar

    Commons项目组中的一个用来处理JavaBean类的反射、内省的工具包,一般的Web开发都需要用到这个包的,个人认为是一个很好的资源。

    json-lib-2.4&dependencies jars.zip

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

    JavaWeb BeanUtils信息类原理详解

    在实际开发中,我们经常需要对 JavaBean 对象进行操作,例如设置属性值、获取属性值、将 map 封装到 bean 对象中等。BeanUtils 提供了一种简洁的方式来实现这些操作,使得我们的代码更加简洁和易读。 在使用 ...

    javaweb文档

    - **示例代码**:提供使用BeanUtils工具包复制JavaBean属性的具体代码示例。 ### 10. 泛型技术 (Generic) #### 1.17 泛形的作用 - **泛型优势**:解释泛型技术的优势,包括类型安全性和代码复用性等。 - **使用场景...

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

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

    方立勋30天轻松掌握JavaWeb视频笔记

    - **BeanUtils工具包**:介绍Apache Commons BeanUtils工具包的使用方法,提高对JavaBean的操作效率。 - **内省应用**:结合具体案例,展示内省技术的实际应用价值。 ##### 9. 泛型技术 - **泛型的作用**:阐述泛型...

    JAVAEE笔记

    - **BeanUtils工具包**:Apache Commons BeanUtils提供了一组工具方法来操作JavaBean,如复制属性值、调用getter/setter方法等。 #### 六、泛型技术 泛型是一种在编译时检查类型的机制,它可以避免运行时的类型...

    传智播客 方立勋 javaweb 完全笔记

    **7.8 内省——BeanUtils 工具包** - **功能**: 提供操作 JavaBean 的便捷方法。 - **操作**: - 属性复制 - 属性获取 **7.9 泛型(Generic)** - **目的**: 在编译时检查类型安全,并允许创建高度可复用的组件。 - ...

Global site tag (gtag.js) - Google Analytics