说明,这是从BeanSoft的blog上看到的,上面提供了代码,我看过之后,自己按照那个思路又理了一遍,增加记忆。
给定:
配置文件 config.txt, 文件内容
className = com.example.MyBean
field = name
value = 网易博客
|
该文件中的三个值会随时可能变化, 唯一不变的是 className 指定的都是一个 JavaBean,field制定该javaBean的属性value指定该属性的值。
要求: 写一段代码, 读取配置文件 config.txt, 然后实现把 className 指定的 JavaBean 类加载(注意这个类名是可以修改的, 可配置的), 然后生成一个实例,
并把配置文件中field字段指定的值作为这个实例的属性名(这里是name)所对应的值设置为 网易博客(字符串), 并且要读出最后设置的值.
代码:
1.假定一个Bean:
package com.example;
public class MyBean {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; } } |
2实际读取数据
package com.example;
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.*; import java.lang.reflect.Method; import java.util.Properties;
public class IocStudy {
Properties pop = new Properties(); public void loadConfig(File file) throws IOException{ FileInputStream fis = new FileInputStream(file); pop.load(fis); fis.close(); } public void setValue(String className, String field, String value) throws Exception { Class bean = Class.forName(className); Object obj = bean.newInstance(); BeanInfo info = Introspector.getBeanInfo(bean); PropertyDescriptor[] pds =info.getPropertyDescriptors(); for(PropertyDescriptor pd : pds){ if(pd.getName().equalsIgnoreCase(field)){ Method rm = pd.getReadMethod(); Method wm = pd.getWriteMethod(); wm.invoke(obj, value); System.out.println("设置的值是:"+rm.invoke(obj, null)); break; } } } private File getConfig(String fileName){ String filePath = this.getClass().getClassLoader().getResource("").toString(); filePath = filePath.substring(0, filePath.indexOf("classes")-1)+"/"; System.out.println(filePath); File file = new File(filePath+fileName); return file; } /** * @param args */ public static void main(String[] args) throws Exception { IocStudy ioc = new IocStudy(); ioc.loadConfig(ioc.getConfig("config.xml")); ioc.setValue(ioc.pop.getProperty("className"), ioc.pop.getProperty("field"), ioc.pop.getProperty("value")); }
}
|
文章来源:
http://huxiaofei590.blog.163.com/blog/static/3259612200711611955728