JAVA读取配置文件内容并反射设置类里面的属性值

下面的代码是已知配置文件里面的内容,将里面的值给拿出来设置给实体类的有参构造函数。

package chapte2;

import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.Properties;

public class chapte2 {
    public static void main(String[] args) throws Exception {
        Properties properties=new Properties();
        ClassLoader classLoader=chapte2.class.getClassLoader();  //getClassLoader()这个是获取根路径下的,如果不是src下,得记得加上包名
        InputStream inputStream=classLoader.getResourceAsStream("chapte2/aplication.properties");
        properties.load(inputStream);
        Class c=Class.forName(properties.getProperty("classname"));
        Object o=c.newInstance();   //通过properties.getProperty获取的值就是String类型,所以并不能在实体类里面有int类型
        properties.forEach((key,val)->{
            if (!key.toString().equals("classname")) {
                try {
                    Field field=c.getDeclaredField(key.toString());
                    field.setAccessible(true);
                    field.set(o,val);
                } catch (NoSuchFieldException | IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        });
        System.out.println(o.toString());
        }
    }

### 配置文件aplication.properties里面的内容
classname=chapte2.Myname
name=lijie
age=19
package chapte2;

public class Myname {
    private String name;
    private String age;

    @Override
    public String toString() {
        return "Myname{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public Myname() {
        super();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Myname(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

效果图如下所示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以通过反射来动态地获取和方法的信息。而配置文件则是一种常用的存储配置数据的方式。因此,可以使用反射读取配置文件中的数据,并根据这些数据来动态地创建对象或调用方法。 具体来说,可以使用JavaProperties读取配置文件中的数据,例如: ``` Properties prop = new Properties(); prop.load(new FileInputStream("config.properties")); ``` 这里假设配置文件名为config.properties,可以通过load方法将其读入到Properties对象中。然后可以通过getProperty方法来获取指定属性,例如: ``` String className = prop.getProperty("class"); Class clazz = Class.forName(className); ``` 这里假设配置文件中有一个名为class的属性,其为要创建对象的的全限定名。可以通过getProperty方法获取该属性,然后使用Class.forName方法来获取该的Class对象。 接下来,就可以使用反射来创建对象或调用方法了,例如: ``` Object obj = clazz.newInstance(); Method method = clazz.getMethod("methodName", parameterTypes); method.invoke(obj, args); ``` 这里假设要调用名为methodName的方法,并且该方法需要传入参数args。可以使用getMethod方法获取该方法的Method对象,然后使用invoke方法调用该方法。 当然,这只是一个简单的示例,实际应用中可能需要更复杂的操作。不过,通过反射配置文件的结合,可以实现更加灵活和动态的程序设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值