创建spring容器
package springbaby;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ApplicationContext {
//缓存spring中的bean对象
private Map<String, Object>map = new HashMap<String, Object>();
/**
* 利用配置文件初始化当前容器
* String xml:配置文件,初始化bean对象
* @param xml
* @throws Exception
*/
public ApplicationContext(String xml) throws Exception{
/*
* 利用dom4j读取xml文件,得到bean的类名和bean的id
* 根据类名动态加载bean对象,将对应的对象和id
* 添加到map中,准备调用
*/
//从resource(classpath)中读取流
InputStream in = getClass().getClassLoader().getResourceAsStream(xml);
SAXReader reader = new SAXReader();
Document document = reader.read(in);
in.close();
//解析xml文件
Element root = document.getRootElement();
List<Element> elements = root.elements("bean");
for(Element element:elements){
String id = element.attributeValue("id");
String classname = element.attributeValue("class");
//动态加载类创建对象
Class cls = Class.forName(classname);
Object object = cls.newInstance();
map.put(id, object);
}
}
public Object getBean(String id){
//根据id在map中查找bean
return map.get(id);
}
}
bean对象
package springbaby;
import org.junit.Test;
public class Aoo {
public static void main(String[] args) {
}
public void test1(){
System.out.println("test1()方法有Demo注解");
}
public void test2(){
System.out.println("test2()方法有Demo注解");
}
@Test
public void test3(){
System.out.println("test3()");
}
public void test4(){
System.out.println("test4()");
}
public void test5(String name,int age){
System.out.println("test5()");
System.out.println(name+","+age);
}
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="aoo" class="springbaby.Aoo"></bean>
<bean id="date" class="java.util.Date"></bean>
</beans>
创建对象
package springbaby;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Exception {
ApplicationContext ap = new ApplicationContext("spring.xml");
Date date = (Date) ap.getBean("date");
System.out.println(date);
}
}