用dom4j读取配置文件来模拟spring的bean工厂

需要用到的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工厂机制

你可能感兴趣的:(spring,bean,String,object,HashMap,Class)