`

JFig读取配置文件,实现动态加载

阅读更多

通过JFig.jar可以实现读取配置文件,把数据保存到集合中,然后通过代理就可以实现动态加载了.
Collection类

Java代码 复制代码
  1. /**  
  2.  * @author 42087743  
  3.  * 功能:读取配置文件,将数据存储到hashmap中  
  4.  * 说明:为节约版面,省去了set和get方法  
  5.  */  
  6. public class CollectionConfig {   
  7.     //设置xml文件中的name   
  8.     private final static String Config_Section = "collection";   
  9.     //声明存储数据的hashmap   
  10.     private static Map<String,String> hashMap = null;   
  11.     //主要方法,通过JFig读取配置文件   
  12.     public static Map load(String config_File){   
  13.         JFigLocator jFigLocator = new JFigLocator(config_File);   
  14.         JFigIF jFigIF = JFig.getInstance(jFigLocator);   
  15.         hashMap = new HashMap<String,String>();   
  16.            
  17.         //存储数据到properties中   
  18.         Properties props = jFigIF.getSectionAsProperties(Config_Section);   
  19.         Enumeration enumeration = props.keys();   
  20.         //迭代数据存储到hashmap中   
  21.         while(enumeration.hasMoreElements()){   
  22.             String key = (String) enumeration.nextElement();   
  23.             String value = (String) props.get(key);   
  24.             hashMap.put(key, value);   
  25.         }   
  26.         return hashMap;   
  27.     }   
  28. }  
/**
 * @author 42087743
 * 功能:读取配置文件,将数据存储到hashmap中
 * 说明:为节约版面,省去了set和get方法
 */
public class CollectionConfig {
	//设置xml文件中的name
	private final static String Config_Section = "collection";
	//声明存储数据的hashmap
	private static Map<String,String> hashMap = null;
	//主要方法,通过JFig读取配置文件
	public static Map load(String config_File){
		JFigLocator jFigLocator = new JFigLocator(config_File);
		JFigIF jFigIF = JFig.getInstance(jFigLocator);
		hashMap = new HashMap<String,String>();
		
		//存储数据到properties中
		Properties props = jFigIF.getSectionAsProperties(Config_Section);
		Enumeration enumeration = props.keys();
		//迭代数据存储到hashmap中
		while(enumeration.hasMoreElements()){
			String key = (String) enumeration.nextElement();
			String value = (String) props.get(key);
			hashMap.put(key, value);
		}
		return hashMap;
	}
}



Proxy类

Java代码 复制代码
  1. /**  
  2.  * @author 42087743   
  3.  * 功能:代理,为用户屏蔽内部代码,方便用户得到实例  
  4.  */  
  5. public class Proxy {   
  6.     // 创建对象hashmap,得到读取配置文件的hashmap   
  7.     private static Map hashMap = CollectionConfig.getHashMap();   
  8.   
  9.     // 用户输入key,返回给用户value   
  10.     public static Object getInstance(String key) throws ClassNotFoundException {   
  11.         Object value = null;   
  12.         value = Class.forName(hashMap.get(key).toString());   
  13.         return value;   
  14.     }   
  15. }  
/**
 * @author 42087743 
 * 功能:代理,为用户屏蔽内部代码,方便用户得到实例
 */
public class Proxy {
	// 创建对象hashmap,得到读取配置文件的hashmap
	private static Map hashMap = CollectionConfig.getHashMap();

	// 用户输入key,返回给用户value
	public static Object getInstance(String key) throws ClassNotFoundException {
		Object value = null;
		value = Class.forName(hashMap.get(key).toString());
		return value;
	}
}



config.xml

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <CONFIGURATION>   
  3.     <section name="collection">   
  4.         <entry key="java.util.List" value="java.util.ArrayList" />   
  5.         <entry key="java.util.Set" value="java.util.HashSet" />   
  6.         <entry key="java.util.Map" value="java.util.HashMap" />   
  7.     </section>   
  8. </CONFIGURATION>  
<?xml version="1.0" encoding="utf-8"?>
<CONFIGURATION>
	<section name="collection">
		<entry key="java.util.List" value="java.util.ArrayList" />
		<entry key="java.util.Set" value="java.util.HashSet" />
		<entry key="java.util.Map" value="java.util.HashMap" />
	</section>
</CONFIGURATION>



Test类

Java代码 复制代码
  1. /**  
  2.  * @author 42087743   
  3.  * 功能:测试,读取指定的配置文件,动态加载它,最后运行它的方法  
  4.  */  
  5. public class Test {   
  6.     public static void main(String[] args) throws ClassNotFoundException,   
  7.             InstantiationException, IllegalAccessException,   
  8.             IllegalArgumentException, InvocationTargetException {   
  9.         String key = "java.util.Map";   
  10.         // 读取配置文件   
  11.         CollectionConfig.load("com/jfig/config.xml");   
  12.         // 加载类   
  13.         Class o = (Class) Proxy.getInstance(key);   
  14.         // 获得实例   
  15.         Object ob = o.newInstance();   
  16.         // 得到方法数组   
  17.         Method[] method = o.getMethods();   
  18.         // 迭代,匹配方法名,最后调用该方法   
  19.         for (int i = 0; i < method.length; i++) {   
  20.             // 将==先进行比较,可以改善性能,因为==比equals速度快   
  21.             if ("put" == method[i].getName()   
  22.                     || "put".equals(method[i].getName())) {   
  23.                 // 将所有方法名放到集合中去   
  24.                 for (int j = 0; j < method.length; j++) {   
  25.                     method[i].invoke(ob,   
  26.                             new Object[] { j, method[j].toString() });   
  27.                 }   
  28.                 // 直接跳出循环,无须继续循环下去   
  29.                 break;   
  30.             }   
  31.         }   
  32.         for (int i = 0; i < method.length; i++) {   
  33.             if ("size" == method[i].getName()   
  34.                     || "size".equals(method[i].getName())) {   
  35.                 System.out.println("集合的大小是:" + method[i].invoke(ob));   
  36.                 break;   
  37.             }   
  38.         }   
  39.     }   
  40. }  
/**
 * @author 42087743 
 * 功能:测试,读取指定的配置文件,动态加载它,最后运行它的方法
 */
public class Test {
	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException,
			IllegalArgumentException, InvocationTargetException {
		String key = "java.util.Map";
		// 读取配置文件
		CollectionConfig.load("com/jfig/config.xml");
		// 加载类
		Class o = (Class) Proxy.getInstance(key);
		// 获得实例
		Object ob = o.newInstance();
		// 得到方法数组
		Method[] method = o.getMethods();
		// 迭代,匹配方法名,最后调用该方法
		for (int i = 0; i < method.length; i++) {
			// 将==先进行比较,可以改善性能,因为==比equals速度快
			if ("put" == method[i].getName()
					|| "put".equals(method[i].getName())) {
				// 将所有方法名放到集合中去
				for (int j = 0; j < method.length; j++) {
					method[i].invoke(ob,
							new Object[] { j, method[j].toString() });
				}
				// 直接跳出循环,无须继续循环下去
				break;
			}
		}
		for (int i = 0; i < method.length; i++) {
			if ("size" == method[i].getName()
					|| "size".equals(method[i].getName())) {
				System.out.println("集合的大小是:" + method[i].invoke(ob));
				break;
			}
		}
	}
}



后来想拓展下,进而实现spring的IOP功能,发现没有那么简单,首先就因为class类型没有办法转型到其他的常用类型,看来还需要继续研究.

分享到:
评论

相关推荐

    jfig-1.5.0.zip

    2. `JFig Preferences`:这个名字暗示这可能是一个配置文件或设置文件,用于存储用户偏好、选项或者程序的默认设置。在许多软件中,用户可以通过修改这些设置来个性化他们的体验,例如改变界面主题、调整行为或设定...

    JFig简单应用实例工程

    7. **调试与运行**:用户可以通过集成开发环境(IDE)如Eclipse或IntelliJ IDEA导入“JFigStudy”项目,配置好JFig库后,编译并运行源代码以查看示例应用的效果。 8. **学习资源**:除了提供的示例工程,学习JFig还...

    jfig-src 源码及示例

    Windows下使用*.ini作为配置文件,Java...JFig就是这样一个读取配置信息的工具。 学习步骤: 1.把本包拷贝下来 2.使用eclipse或者idea打开, 3.把Jar包添加到系统中 4.test目录是我自己加的,运行看看,就知道其原理了

    JFig:JFig 是一个简单而强大的管理应用程序配置的工具-开源

    JFig 为开发人员提供了一个简单而强大的工具来管理他们的应用程序配置。 使用分层 xml 文件和替换变量的组合,它使开发人员能够: 1. 将应用程序配置存储在一个通用的 XML 文件存储库中 2. 使用一个通用、方便的界面...

    jfig-1.5.2-javadoc.chm

    自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。

    tfe.rar_CW RADAR_high_图形/文字识别

    这些文件包含了用于分析雷达波形的图形用户界面(GUI)设计以及相关的算法实现。 【描述】"reviews radar waveforms, including CW, pulsed, and LFM, High" 指出该压缩包中的内容涵盖了雷达信号的不同类型,包括...

Global site tag (gtag.js) - Google Analytics