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

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(){
		
	}
}

 

原文地址:https://www.cnblogs.com/shaoshao/p/3113131.html