您的位置:首页 > 其它

反射机制和配置文件的用法

2013-06-01 21:38 225 查看
package com.fanShe;
import java.util.*;
import java.io.*;
import java.lang.reflect.Method;
import java.lang.String;
import javax.swing.*;
public class ExtendobjectPoolFactory extends JFrame{

/***通过反射机制 从一个文件中取出 已经写好的类 a=java.util.Date b=javax.swing.JFrame
* @param args
* 并使用文件中的方法
*
*  程序的文件c:/obj.txt 是:
*
*  a=javax.swing.JFrame
b=java.lang.String
#set the title of a
a%visible=true

最后文件可以生成一个JFrame窗口 但是没有大小
*
*/
private Map objectPool=new HashMap<String , Object>();
//properties这个类继承了HashMap
private Properties config=new Properties();

//从文件中初始化Properties对象
public void init(String fileName){
try {
//从文件中取出 文件中的‘=‘为界线 一个是键 一个是值
FileInputStream fis=new FileInputStream(fileName);
config.load(fis);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

//定义一个创建对象的方法
//可以生成以类名 的 java对象
private Object createObject(String clazzName) throws Exception{
Class clazz=Class.forName(clazzName);
//返回对应类的默认构造Class对象

return clazz.newInstance();
}

//从文件中初始化 对象池
//它根据配置文件来创建对象
public void initPool() throws Exception{
for(String name : config.stringPropertyNames()){
System.out.println(name);

if(!name.contains("%")){
objectPool.put(name, createObject(config.getProperty(name)));
}
}
}
//从文件中初始化 对象池
//它根据配置文件来创建对象
public void initProperty() throws Exception{
for(String name : config.stringPropertyNames()){
if(name.contains("%")){
String[] objAndProp=name.split("%");
Object target =getObject(objAndProp[0]);

String medName ="set"+objAndProp[1].substring(0,1).toUpperCase()
+objAndProp[1].substring(1);

//System.out.println("medName = "+medName);

Class targetClass=target.getClass();
System.out.println("hrear of target = "+target);
//System.out.println("class = "+targetClass);

//获得该属性对应的set方法
Method mtd=targetClass.getMethod(medName, boolean.class);
//通过Method的invoke方法执行set方法
//System.out.println("config.getProperty = "+config.getProperty(name));

boolean b=Boolean.valueOf("true");

//System.out.println("b===" + String.valueOf(b));
//System.out.println("String = "+target+"   boolean = "+String.valueOf(b));

mtd.invoke(target,b);
}
}
}

public Object getObject(String name){
return objectPool.get(name);
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
ExtendobjectPoolFactory e=new ExtendobjectPoolFactory();
e.init("c:/obj.txt");
e.initPool();
e.initProperty();
System.out.println("a");
}

public ExtendobjectPoolFactory(){

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: