题目: IOC 后台机制学习

 
题目: IOC 后台机制学习
给定:
配置文件 config.txt, 文件内容
className = test.JavaBean1
field = username
value = ABC

该文件中的三个值会随时可能变化, 唯一不变的是 className 指定的都是一个 JavaBean(为了简化, 我们假定里面已经有一个 username 属性, 例如:

class JavaBeanxxxx {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String uname) {
        this.username = uname;
    }
}

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

此题已经被 TigerTian 解答出来, 欢迎学习, 也感谢 TigerTian:
package com.gcoresoft.ioc;

import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.beans.*;

public class IOCStudy {
    
    
//Load the properties file
    private Properties prop=new Properties();
    
    
public void loadPropFile(String filename)
    {
        
try
        {
            FileInputStream fin
=new FileInputStream(filename);
            prop.load(fin);
            fin.close();
        }
catch(Exception e){
            System.out.println(e.toString());
        }
    }
    
    
private String getValueByName(String Name)
    {
        
return prop.getProperty(Name);
    }
    
    
public static void main(String[] args)
    {
        IOCStudy ioc
=new IOCStudy();
        ioc.loadPropFile(
"E:\\Work\\GetInIOC\\src\\com\\gcoresoft\\ioc\\Config.txt");
        
try
        {
            Class bean
=Class.forName(ioc.getValueByName("className"));
            
try {
                java.beans.BeanInfo info
=java.beans.Introspector.getBeanInfo(bean);
                java.beans.PropertyDescriptor pd[]
=info.getPropertyDescriptors();
                
try {
                    Method mSet
=null,mRead=null;
                    Object obj
=bean.newInstance();
                    
for(int i=0;i<pd.length;i++)
                        
if(pd[i].getName().equalsIgnoreCase(ioc.getValueByName("field")))
                        {
                            mSet
=pd[i].getWriteMethod();
                            mRead
=pd[i].getReadMethod();                            
                        }
                    
try {
                        mSet.invoke(obj, ioc.getValueByName(
"value"));
                        String str
=(String)mRead.invoke(obj, null);
                        System.out.println(str);
                    } 
catch (IllegalArgumentException e) {
                        
// TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
catch (InvocationTargetException e) {
                        
// TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } 
catch (InstantiationException e) {
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                } 
catch (IllegalAccessException e) {
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }

                
            } 
catch (IntrospectionException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
catch(ClassNotFoundException e){
            System.out.println(e.toString());
        }
        
    }
    
}

posted on 2008-08-27 20:41 金家寶 阅读(284) 评论(0)  编辑  收藏 所属分类: Java


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


网站导航: