レベル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;
	}
}

おすすめ

転載: blog.csdn.net/Zheng_lan/article/details/105714242