需要用到的jar包,dom4j的jar包,网上可以下载
配置文件applicationContext.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="car" class="com.test.spring.dom4j.Car"></bean> <bean id="plane" class="com.test.spring.dom4j.Plane"></bean> <bean id="train" class="com.test.spring.dom4j.Train"></bean> </beans>
在ClassPathXmlApplicationContext类的构造方法中,构造方法参数为配置文件的路径名,如在本例中:com/test/spring/dom4j/applicationContext.xml . 接着在构造方法中,
SAXReader reader = new SAXReader(); Document doc = reader.read(this.getClass().getClassLoader().getResourceAsStream(fileName)); Element root = doc.getRootElement(); List list = root.elements(); //以下为遍历配置文件中的所有节点,读取每个节点的 id 和 class 属性 for(int index= 0 ; index < list.size();index++){ Element bean = (Element) list.get(index); String id = bean.attributeNodeName("id"); String className = bean.attributeNodeName("class"); Object o = Class.forName(className).newInstance(); map.put(id,o); }
map为一个hashmap, Map<String,Object> map = new HashMap<Sting,Object>();
然后提供一个返回map中值的方法,
public Object getBean(String id){ return map.get(id); }
差不多完成了。创建一个Test类来测试一下。
public Test{ public static void main(String[] args){ BeanFactory beanFactory = new ClassPathXmlApplicationContext("com/test/spring/dom4j/applicationContext.xml"); VehicleFactory v = beanFactory.getBean("car");//plane,train v.run(); } }
其中,ClassPathXmlApplicationContext 类实现了BeanFactory 接口,该接口中只定义了一个getBean(String id)方法
Car , Plane , Train 类实现了 VehicleFactory 接口,该接口只定义了一个run()方法。
如此就结束了。简单的模拟了spring的bean工厂机制