[Moveable.java]
package com.njupt.zhb.test; public interface Moveable { void run(); }
[Plane.java]
package com.njupt.zhb.test; public class Plane implements Moveable { @Override public void run() { // TODO Auto-generated method stub System.out.println("飞机在翱翔....."); } }
[Train.java]
package com.njupt.zhb.test; public class Train implements Moveable{ @Override public void run() { System.out.println("火车在飞奔...."); } }
package com.njupt.zhb.test; public interface BeanFactory { Object getBean(String id); }
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="train" class="com.njupt.zhb.test.Train"> </bean> <bean id="plane" class="com.njupt.zhb.test.Plane"> </bean> </beans>
package com.njupt.zhb.test; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class ClassPathXmlApplicationContext implements BeanFactory { private Map<String, Object> mapContainer = new HashMap<String, Object>();//用于存放解析出来的id和对象 public ClassPathXmlApplicationContext(String fileName) throws Exception { SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(this.getClass().getClassLoader() .getResourceAsStream(fileName)); Element root = doc.getRootElement(); List list = XPath.selectNodes(root, "/beans/bean");//获得此节点下的所有值 System.out.println(list.size()); for (int i = 0; i < list.size(); i++) { Element bean = (Element) list.get(i); String id = bean.getAttributeValue("id");//获得id对应的值 String clazz = bean.getAttributeValue("class");//获得class对应的值 Object o = Class.forName(clazz).newInstance();//Java反射机制,根据类名生成对象 mapContainer.put(id, o);//保存到map中 System.out.println(id + " " + clazz); } } @Override public Object getBean(String id) { return mapContainer.get(id); } }
package com.njupt.zhb.test; public class TestMain { public static void main(String[] args) throws Exception { BeanFactory f = new ClassPathXmlApplicationContext( "com/njupt/zhb/test/sample.xml"); Object obj1 = f.getBean("train");//获得标签为train的对象 Moveable m1 = (Moveable)obj1;//接口调用子类 m1.run(); // //---------------------- Object obj2 = f.getBean("plane"); Moveable m2 = (Moveable) obj2; m2.run(); } }
2 train com.njupt.zhb.test.Train plane com.njupt.zhb.test.Plane 火车在飞奔.... 飞机在翱翔.....