zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    还在写onClickListener()???你OUT拉
    Java 中的reference
    如何将eclipse上的android项目转移到android studio
    List,Set,Map再学习一下
    Java对象实例化的速度的一个试验
    如何自定义ImageView并让其渐变出现(李刚老师)
    android studio 中git插件的使用 github项目的配置及操作
    eGit插件
    原来Linux才是深入学习3D的好去处【原创】
    用FileMapping跨进程共享数据
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300339.html
Copyright © 2011-2022 走看看