wuyida

Java反射---对象池

在很多Java  EE 框架中都需要根据配置文件信息来创建Java对象,从配置文件读取的只是i某个类的字符串类名,程序就需要根据该字符串来创建对应的实例,就必须使用反射。

    下面程序就实现了一个简单的对象池,该对象池会根据配置文件读取name-value对,然后创建这些对象,并将这些对象放入一个HashMap中。

package com.reflect;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class ObjectPoolFactory {
	
	//定义一个对象池,前面是对象名,后面是实际对象
	private Map<String,Object> objectPool=new HashMap<String,Object>();
	//定义一个创建对象的方法
	//该方法只要传入一个字符串类名,程序就可以根据该类名生成Java对象
	private Object createObject(String clazzName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
		
		//根据字符串来获对应的Class对象
		Class<?> clazz=Class.forName(clazzName);
		//使用clazz对应的默认构造器创建实例
		return clazz.newInstance();
	}
	//该方法根据指定文件来初始化对象池
	//它根据配置文件来创建对象
	public void initPool(String fileName){
		FileInputStream fis=null;
		try {
			fis=new FileInputStream(fileName);
			Properties props=new Properties();
			props.load(fis);
			for(String name:props.stringPropertyNames()){
				//每取出一对属性名--属性值对,就根据属性创建一个对象,
				//调用createObject创建对象,并将对象添加到对象池中
				objectPool.put(name, createObject(props.getProperty(name)));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				if(fis!=null){
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public Object getObejct(String name){
		//从objectPool中获取指定name对应的对象.
		return objectPool.get(name);
	}
	
	public static void main(String[] args) {
		ObjectPoolFactory pf=new ObjectPoolFactory();
		pf.initPool("D:/mavenwork/mianshi/src/com/reflect/obj.txt");
		System.out.println(pf.getObejct("a"));
		
	}
	
}

obj.txt 文件内容如下:

a=java.util.Date
b=javax.swing.JFrame

分类:

技术点:

相关文章: