题解代码:
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;
}
}