A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 血剑无痕 中级黑马   /  2013-10-13 23:07  /  1809 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

/**
*  1、Map的遍历
*      data.get(fieldName);
*  2、 properties文件的读取
*     获取源文件的字段
*      ResourceBundle bundle = ResourceBundle.getBundle("data");
*  获取文件的配置信息
        String className = bundle.getString("className");
*  3、反射实例化
*      Class clazz = Class.forName(className);
        Object obj = clazz.newInstance();
    4、反射字段的获取
        Class clazz = obj.getClass();
        Field[] fields = clazz.getDeclaredFields();
    5、遍历数组 foreach
        for(Field f : fields){}
    6、反射字段的修改
        f.setAccessible(true);
        f.set(obj, value);
        
*/
public class TestMain {
   
    public static void main(String[] args) throws Exception {
        //资料库
        Map<String,String> data= new HashMap<String,String>();
        data.put("name", "lisi");
        data.put("age", "18");
        data.put("tel", "911");
        data.put("address", "中国");
        
        //获得properties文件中key为className的值
        ResourceBundle bundle = ResourceBundle.getBundle("data"); //通过getBundle获得src下properties文件
        //获得值
        String className = bundle.getString("className");
        //获得className字符串的实例对象
        Class clazz = Class.forName(className);
        //获得实例对象
        Object obj = clazz.newInstance();
        
        //自动填充数据  
        autoFire(obj,data);
        
        //输出获得的实例对象
        System.out.println(obj);
        
    }

    /**
     * 自动填充数据  
     * @param obj 填充对象
     * @param data 数据源,资料库
     */
    private static void autoFire(Object obj, Map<String, String> data) throws Exception {
        //获得填充对象的所有字段,然后将此字段在数据源data中查询,如果有则填充
        // * 获得字节码对象
        Class clazz = obj.getClass();
        // * 获得所有的私有字段
        Field[] fields = clazz.getDeclaredFields();
        // * 遍历所有的字段
        for(Field f : fields){
            //f每一个字段对象
            // * 通过字段名称 在数据源data中获得相应的值
            String fieldName = f.getName();
            String value = data.get(fieldName);
            // * 如果有就填充
            if(value != null){
                //强制设置权限
                f.setAccessible(true);
                // 填充 -- 给填充对象obj的字段填充相应的值
                f.set(obj, value);
            }
        }
        
        
        
        
    }

}


1 个回复

倒序浏览
这些都是基础
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马