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

  • 相关阅读:
    sgdisk基本用法
    影响性能的关键部分-ceph的osd journal写
    SSD固态盘应用于Ceph集群的四种典型使用场景
    Ceph在OpenStack中的地位
    Ceph的工作原理及流程
    Ceph系统的层次结构
    SharePoint运行状况分析器有关磁盘空间不足的警告
    Microsoft Exchange本地和Exchange Online可以与第三方服务共享
    SharePoint Server 2016 WEB 网站浏览器支持
    禁用自动映射的 Exchange 邮箱
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300339.html
Copyright © 2011-2022 走看看