配置文件:extObj.txt
a=javax.swing.JFrame
b=javax.swing.JLabel
#set the title of a
a%title=Test Title
测试文件
import java.util.Map;
import java.util.HashMap;
import java.util.Properties;
public class ExtendedObjectPoolFactory
{
private Map<String,Object> objectPool=new HashMap<String,Object>();
private Properties props=new Properties();
public void init(String FileName){
FileInputStream fis=null;
try{
fis=new FileInputStream(FileName);
props.load(fis);
}
catch(Exception e){System.out.println("read props fail");}
finally{
try{if(fis!=null){fis.close();}}
catch(Exception e1){ex.printStackTrace();}
}
}
private Object createObject(String clazzName)throws Exception{
Class<?> clazz=Class.forName(clazzName);
return clazz.newInstance();
}
public void initPool() throws Exception{
for(String name:props.stringPropertyName()){
//不包含%创造一对象
if(!name.contains("%")){
objectPool.put(name,createObject(props.getProperty(name)));
}
}
}
public void initProperty() throws Exception{
for(String name:props.stringPropertyName){
if(name.contains("%")){
//按%分割
String[] objAndProps=name.split("%");
//通过name获取类实例
Object target=getObject(objAndProps[0]);
String mtdName="set"+objAndProps[1].substring(0,1). toUpperCase()+
objAndProps[1].substring(1);
//通过对象实例获取该对象的Class
Class<?>targetClass=target.getClass();
//获取该属性对应的setter方法
Method mtd=targetClass.getMethod(mtdName,String.class);
//将props.getProperty(name)的属性值作为调用setter方法的实参
mtd.invoke(target,props.getProperty(name));
}
}
}
//获取name所对应的一个对象实例
public Object getObject(String name){
return objectPool.get(name);
}
public static void main(String[] args) throws Exception
{
ExtendedObjectPoolFactory eopf=new ExtendedObjectPoolFactory();
eopf.init("extObj.txt");
eopf.initPool();
eopf.initProperty();
System.out.println(eopf.getObject("a"));
}
}
这样写不能出现一个窗口,不知道是为啥