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

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

		

	}

}

 

你可能感兴趣的:(配置文件)