对于Spring框架的简单模拟:
a).读取xml配置文件
b.)利用java反射机制获取对象
第一步:创建一个接口,定义一个获取对象的方法getBean():
public interface BeanFactory {
public Object getBean(String name);
}
第二步:创建一个类XmlContext,实现Beanfactory接口中的getBean方法:
public class XmlContext implements BeanFactory {
// 对象名加对象实例
private Map<String, Object> beans = new HashMap<String, Object>();
// 利用jdom读取xml文件获取对象名,通过反射获取对象
public XmlContext() throws Exception {
SAXBuilder builder = new SAXBuilder();
InputStream file = new FileInputStream("test.xml");
Document document = builder.build(file);// 获得文档对象
Element root = document.getRootElement();// 获得根节点
List<Element> list = root.getChildren();
for (Element elements : list) {
// 获取属性值,即为对象的名字
String ObjectName = elements.getAttributeValue("id");
// 在获取类的路径,在通过java反射获取类的类类型,在获取该类的对象
String classpath = elements.getAttributeValue("class");
Object obj = Class.forName(classpath).newInstance();
beans.put(ObjectName, obj);
// 获取子节点下的property节点
List<Element> eles = elements.getChildren("property");
// 进行遍历
for (Element e : eles) {
String proName = e.getAttributeValue("name");
Object beanObj = this.getBean(e.getAttributeValue("bean"));
System.out.println(beanObj.toString());
// 然后调用service的构造方法
String methodName = "set"
+ proName.substring(0, 1).toUpperCase()
+ proName.substring(1);
System.out.println("methodName:" + methodName);
// 通过反射获取构造方法
Method method = obj.getClass().getMethod(methodName,
beanObj.getClass().getInterfaces()[0]);
method.invoke(obj, beanObj);
}
}
}
@Override
public Object getBean(String name) {
return beans.get(name);
}
}