Java反射应用

Java反射可以在运行时动态的获取某个类的信息,并且可以调用里面的方法,反射技术在很多框架里经常被应用。

 

1.通过反射调用构造方法

public static void getInstance(String name) throws Exception {
		Class clz = Class.forName(name);
		Person p1 = (Person)clz.newInstance();//无参构造函数
		System.out.println("Person age == " + p1.getAge() + ", name == " + p1.getName());
		Constructor con = clz.getConstructor(int.class, String.class);//带参构造函数 参数类型
		Person p2 = (Person) con.newInstance(1, "1");带参构造函数 参数值
		System.out.println("Person age == " + p2.getAge() + ", name == " + p2.getName());
	}

 可以看到打印出Person的值

===================================

 Person age == 0, name == null
 Person age == 1, name == 1

===================================

 

 2.通过反射调用方法

现在有一个JavaBean Person

public class Person {
	private String sex;
	private String name;
	private String dep;
	private String address;
	private String id;
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDep() {
		return dep;
	}
	public void setDep(String dep) {
		this.dep = dep;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
}

  现在要通过反射动态的给每个属性赋值,并且取值。加入两个方法分别给属性赋值并且取值

/**
	 * 
	* @Title: setProp 
	* @Description: TODO(给属性赋值) 
	* @param @param prop 属性名
	* @param @param value 属性值
	* @return void    返回类型 
	* @throws
	 */
	private static void setProp(String prop, String value) throws Exception {
		Method method = clz.getDeclaredMethod("set" + value, String.class);//方法名,参数类型
		method.invoke(p, value);//所调用的对象, 参数值
	}
	/**
	 * 
	* @Title: getProp 
	* @Description: TODO(取属性的值) 
	* @param @param prop 属性名
	* @return Object   所调用方法的返回值
	* @throws
	 */
	private static Object getProp(String prop) throws Exception {
		Method method = clz.getDeclaredMethod("get" + prop);//方法名
		Object rvalue = method.invoke(p);//所调用的对象
		return rvalue;
	}

 分别调用Person里面的setXXX和getXXX方法

static Class clz;
	static Person p;
	
	public static void main(String[] args) throws Exception {
		String[] prop = {"Sex", "Name", "Dep", "Address", "Id"};
		clz = Person.class;
		p = (Person) clz.newInstance();
		for (int i = 0; i < prop.length; i++) {
			setProp(prop[i], prop[i]);
			Object obj = getProp(prop[i]);
			System.out.println(prop[i] + " === " + obj);
		}
	} 

 打印出

Sex === Sex
Name === Name
Dep === Dep
Address === Address
Id === Id

 

3.读取配置文件

有的时候我们需要把一些配置写到配置文件里面,比如ip,host。这样当环境改变的时候我们可以不用改变源码直接改配置文件就可以修改配置。

写好一个配置文件

domain=http://172.16.1.185:9001/

 把这个文件放到工程的classpath目录下面

 现在要读取这个配置文件,可以通过获取ClassLoader获取classpath下的config.properties

Properties props = new Properties();
			//读取FileStore.properties配置文件
    		props.load(PropTest.class.getClassLoader().getResourceAsStream("config.properties"));
    		String filePath = props.getProperty("domain");

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值