通过properties文件、反射,获取对象

本文介绍了一种在Java中读取properties配置文件的方法,并通过具体代码实例展示了如何利用Properties类进行文件加载及数据读取。同时,还提供了一个实用工具类来实现properties文件中的属性值读取和对象实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、说明

1、以下代码实例,properties文件位于类同级目录下;

2、加载properties文件,使用Properties类的load(InputStream inStream)方法。

3、Properties类中的修改数据方法是线程安全的(synchronized)

二、Properties类UML类图

三、代码实例

3.1 message.properties内容

class.full.name=com.gof.adaptee.electric.VoltageAdapter

3.2 常量池

public class ConstantPool {
    
    public static final String CLASS_FULL_NAME = "class.full.name";

}

3.3 读取properties文件

/**
 * 读取properties文件工具类
 * 
 * @since 2016.05.20
 *
 */
public class PropertiesUtil {
    
    /**
     * properties文件所在路径
     */
    private static final String PATH = PropertiesUtil.class.getClassLoader().getResource("").getPath()
            + File.separator + "com" + File.separator + "gof" + File.separator + "adaptee" + File.separator;
    
    /**
     * properties文件名称
     */
    private static final String FILE_NAME = PATH + "message.properties";
    
    /**
     * Properties类
     */
    private static Properties properties = new Properties();
    
    static{
        InputStream inStream = null;
        try {
            inStream = new FileInputStream(new File(FILE_NAME));
            //加载properties文件,以key-value存储
            properties.load(inStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private PropertiesUtil(){
        
    }
    
    /**
     * 通过key,查找value
     * 
     * @param key key值
     * @return value
     */
    public static String getValue(String key){
        return properties.getProperty(key);
    }

}

3.4 实例化对象

/**
 * 实例化对象工具类
 * 
 * @since 2016.05.20
 *
 */
public class BeanUtil {

    /**
     * 通过properties文件中class.full.name属性,实例化对象
     * 
     * @return Object
     */
    public static Object getBean(){
        Object obj = null;
        try {
            Class<?> classes = Class.forName(PropertiesUtil.getValue(ConstantPool.CLASS_FULL_NAME));
            obj = classes.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return obj;
    } 
    
    /**
     * 获取类的实例
     * 
     * @param clas 需要实例化的类的class
     * @return T
     */
    @SuppressWarnings("unchecked")
    public static <T extends IElectricVoltage> T getBean(Class<T> clas){
        T t = null;
        try {
            Class<?> cla = Class.forName(clas.getName());
            t = (T) cla.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return t;
    }

}

3.5 测试

public class Test {
    
    public static void main(String[] args) {
        
        System.out.println(BeanUtil.getBean(VoltageAdapter.class).hashCode());
        
    }

}

 

转载于:https://www.cnblogs.com/wuq126/p/5511859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值