zoukankan      html  css  js  c++  java
  • 反射机制和配置文件的用法

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

     

  • 相关阅读:
    洛谷-P5743 【深基7.习8】猴子吃桃
    洛谷-P5741 【深基7.例10】旗鼓相当的对手
    洛谷-P5740 【深基7.例9】最厉害的学生
    洛谷-P5739 【深基7.例7】计算阶乘
    jvm中常见的指令笔记
    join()方法的源码分析
    Java中线程状态的各种转换关系
    java构造器遇到父类没有无参构造的分析
    jvm栈和堆
    spring新注解
  • 原文地址:https://www.cnblogs.com/shaoshao/p/3113131.html
Copyright © 2011-2022 走看看