第3关:模拟Spring获取对象过程

题解代码:

1.beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <!-- 配置bean  -->
	<bean id="person" class="step3.Person"></bean>
	<bean id="animal" class="step3.Animal"></bean>

</beans>

2.applicationContext.java

package step3;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ApplicationContext {	
	//实例化容器时传解析文件名file
	public ApplicationContext(String file) {
		init(file);
	}

	//创建Map集合
	private Map<String,Object> beanMap=new HashMap<String,Object>();

	//解析文件
	private void init(String file) {
        /**********   Begin   **********/
		String className="",idName="";
		Document doc = null;
		//1.创建解析器SAXReader 对象
		//2.读取数据
        try{
			doc=new SAXReader().read("src/step3/beans.xml");
		}catch(DocumentException e){
			e.printStackTrace();
		}
		//3.拿到根源元素
		Element rootElm = doc.getRootElement();
		//4.获取根源所有的bean元素(标签)
		List<Element> elms = rootElm.elements("bean");
		
		Object obj=null;
		for(int i=0;i<elms.size();i++){
			idName=elms.get(i).attribute("id").getText();
			className=elms.get(i).attribute("class").getText();
			try{
				//5.使用反射创建对象
				obj=Class.forName(className).newInstance();
				//6.存储对象
				beanMap.put(idName,obj);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
        
        /**********   End   **********/
	}

	public Object getBean(String id){
        Object obj=null;
        /**********   Begin   **********/
        //7.根据参数id到Map中查出对应的对象实例返回
        obj = beanMap.get(id);
        
        /**********   End   **********/
        return obj;
	}
	

}

3.Task.java

package step3;

import java.util.List;
import java.util.ArrayList;

public class Task{
	public static List<Object> getBeans() {
		List<Object> list=new ArrayList<>();
        /**********   Begin   **********/
		//1.实例化ApplicationContext容器  传入要解析的xml文档路径
        ApplicationContext app = new ApplicationContext("src/step3/beans.xml");
        
		//2.通过getBean()分别获取Person和Animal对象,将其先后存入List集合中
        Person person = (Person)app.getBean("person");
		list.add(person);
		Animal animal = (Animal)app.getBean("animal");
		list.add(animal);
 
        /**********   End   **********/
		return list;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村头卖假发的小郑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值