package junit.test;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.dom4j.util.SingletonStrategy;
/*
*
* 个人版容器(spring)
*/
public class ItcastClassPathXMLApplicationContext {
private List<BeanDefinition> beanDefines= new ArrayList<BeanDefinition>();
private Map<String,Object> sigletons = new HashMap<String, Object>();//存放实例化后的对象
public ItcastClassPathXMLApplicationContext(String filename){
this.readXML(filename);
this.instanceBeans();//instance:实例化
}
/*
* 完成bean的实例化,使用java反射技术
*/
private void instanceBeans() {
for(BeanDefinition beanDefine: beanDefines){
try {
if(beanDefine.getClassName()!=null&&!"".equals(beanDefine.getClassName().trim()))
System.out.println(beanDefine.getClassName());
sigletons.put(beanDefine.getId(), Class.forName(beanDefine.getClassName()).newInstance());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 读取xml配置文件
*/
private void readXML(String filename) {
SAXReader saxReader = new SAXReader(); //SAXReader是用来读写XML文件的
Document document=null;
try{
URL xmlpath = this.getClass().getClassLoader().getResource(filename);//取得这个类的类转载器,然后在取得类转载器下的文件
document = saxReader.read(xmlpath);
Map<String,String> nsMap = new HashMap<String,String>();
nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间
XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径
xsub.setNamespaceURIs(nsMap);//设置命名空间
List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点
for(Element element: beans){
String id = element.attributeValue("id");//获取id属性值
String clazz = element.attributeValue("class"); //获取class属性值
BeanDefinition beanDefine = new BeanDefinition(id, clazz);
beanDefines.add(beanDefine);
}
}catch(Exception e){
e.printStackTrace();
}
}
/*
* 获取bean实例
*/
public Object getBean(String beanName){
return this.sigletons.get(beanName);
}
}
个人版spring容器
最新推荐文章于 2024-03-07 16:02:02 发布