01-Introspector内省机制

在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码

比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中

将http请求报文的数据 转换到一个  javabacn对象当中去  这样子可以省去我们很多的  request.getparameter('name')   request.getparameter("password") 

还有理解各种持久框架 都是用到了内省机制编程  很重要,很重要,很重要

 

java内省机制核心类是 Introspector

 

来一个示例吧!

先写一个用户Bean类

package com.oa.domain;

import lombok.Data;

/**
 * 注明:我这里使用了 lombok工具来自动生成 getter/setter方法
 * 如果你没有配置,则自己手动写 getter/setter方法吧!!!
 * @author Administrator
 *
 */
@Data
public class User {
    
    private Integer id;            //用户Id
    private String userName;    //用户名
    private String password;    //密码
    
}

使用内省机制获取所有的属性

package com.oa.test;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

import com.oa.domain.User;

public class Demo1 {

    /**
     * 刘诗华
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        //获取User Bean字节码
        BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
        //获取所有的属性集合
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        
        for (PropertyDescriptor pd : propertyDescriptors) {
            System.out.println("属性名:"+pd.getName());
        }
        
        // 打印结果如下显示
        // 属性名:class      class是继承 extends Object类上面的属性
        // 属性名:id
        // 属性名:password
        // 属性名:userName
    }

}

 

注意:如果我们只想要 User类中的所有属性 那我们只需要在获取的时候加上参数 Introspector.getBeanInfo(User.class,Object.class);

//获取User Bean字节码
        BeanInfo beanInfo = Introspector.getBeanInfo(User.class,Object.class);
        //获取所有的属性集合
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        
        for (PropertyDescriptor pd : propertyDescriptors) {
            System.out.println("属性名:"+pd.getName());
        }
属性名:id
属性名:password
属性名:userName

 

posted @ 2018-11-19 20:17  往事只能回味---  阅读(171)  评论(0)    收藏  举报