Thking In Java

关注应用程序的HA、可扩展性 多实践,遇到问题查doc,google,上论坛咨询

 

[导入]题目: IOC 后台机制学习

说明,这是从BeanSoft的blog上看到的,上面提供了代码,我看过之后,自己按照那个思路又理了一遍,增加记忆。
给定:
配置文件 config.txt, 文件内容
className = com.example.MyBean
field = name
value = 网易博客

该文件中的三个值会随时可能变化, 唯一不变的是 className 指定的都是一个 JavaBean,field制定该javaBean的属性value指定该属性的值。

要求: 写一段代码, 读取配置文件 config.txt, 然后实现把 className 指定的 JavaBean 类加载(注意这个类名是可以修改的, 可配置的), 然后生成一个实例,
并把配置文件中field字段指定的值作为这个实例的属性名(这里是name)所对应的值设置为  网易博客(字符串), 并且要读出最后设置的值.

代码:
1.假定一个Bean:
 package com.example;

public class MyBean {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2实际读取数据
 package com.example;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.*;
import java.lang.reflect.Method;
import java.util.Properties;

public class IocStudy {

    Properties pop = new Properties();
    public void loadConfig(File file) throws IOException{
        FileInputStream fis = new FileInputStream(file);
        
        pop.load(fis);
        fis.close();
        
    }
    public void setValue(String className, String field, String value)  throws Exception {
        
        Class bean = Class.forName(className);
        Object obj = bean.newInstance();
        BeanInfo info = Introspector.getBeanInfo(bean);
        PropertyDescriptor[]  pds =info.getPropertyDescriptors();
        
        for(PropertyDescriptor pd : pds){
            if(pd.getName().equalsIgnoreCase(field)){
                Method rm = pd.getReadMethod();
                Method wm = pd.getWriteMethod();
                
                wm.invoke(obj, value);
                
                System.out.println("设置的值是:"+rm.invoke(obj, null));
                
                break;
            }
        }
    }
    private File  getConfig(String fileName){
        String  filePath =  this.getClass().getClassLoader().getResource("").toString();
        filePath = filePath.substring(0, filePath.indexOf("classes")-1)+"/";
        System.out.println(filePath);
        File file = new File(filePath+fileName);
        return file;
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        
        IocStudy ioc = new IocStudy();
        
        ioc.loadConfig(ioc.getConfig("config.xml"));
        
        
        ioc.setValue(ioc.pop.getProperty("className"),
                ioc.pop.getProperty("field"),
                ioc.pop.getProperty("value"));
        
    }

}



文章来源:http://huxiaofei590.blog.163.com/blog/static/3259612200711611955728

posted on 2007-12-06 11:10 ThinkInJava 阅读(131) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

java

友情链接

搜索

最新评论