A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王勇文 中级黑马   /  2013-2-23 19:28  /  1205 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


java程序中 是如何实现 通过配置文件加载类的呢?
原理是是什么? 以及求代码解释。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

3 个回复

正序浏览
  1. import java.io.FileInputStream;
  2. import java.util.Properties;
  3. /**
  4. 配置文件形式如下:
  5. date=java.util.Date
  6. */

  7. class ReflectTest
  8. {
  9.         public static void main(String[] args) throws Exception
  10.         {
  11.                 FileInputStream fis = new FileInputStream("config.txt");
  12.                 Properties pro = new Properties();
  13.                 pro.load(fis);
  14.                
  15.                 //遍历key组成的Set集合
  16.                 for(String key : pro.stringPropertyNames())
  17.                 {
  18.                         System.out.println(createObject(pro.getProperty(key)));
  19.                 }
  20.         }
  21.        
  22.         //传入全限定类名,创建实例
  23.         private static Object createObject(String clazzName) throws Exception
  24.     {
  25.                 //获取字节码
  26.         Class<?> clazz = Class.forName(clazzName);
  27.                 //使用无参构造函数创建实例
  28.         return clazz.newInstance();
  29.     }
  30. }
复制代码
回复 使用道具 举报
本帖最后由 李挺 于 2013-2-23 19:43 编辑

这个文件得写成key=value的形式
value是类名称
用Properties 的load方法加载这个文件的字节流
使用getProperty(key)的方法取得名称,然后就可以通过反射加载了
回复 使用道具 举报
创建一个自己的类SystemProperties ,类中有以下属性:
private static SystemProperties ref; // 为了能创建单例模式
    private java.util.Properties prop = null;

private SystemProperties() throws IOException {
    prop = new java.util.Properties();   //创建一个Properties 类的引用
    prop.load(SystemProperties.class.getResourceAsStream("/jbilling.properties")); //加载配置文件
   
}

获取配置文件:String retValue = prop.getProperty(key);// key为配置文件中的名称,配置文件如:key=value

java.util.Properties中常用的方法有:

getProperties(String key)

getProperties(String key, String defaultValue)

load(InputStream inStream)

loadFromXML(InputStream inStream)

setProperties(String key, String value)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马