Sring IOC实例化Bean模拟
package com.shsxt.spring;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SxtClassPathXmlApplicationContext implements SxtBeanFactory {
private Map<String,Object> results = new HashMap<String, Object>();
private List<SxtBean> beans;
public SxtClassPathXmlApplicationContext(String fileName) {
this.parthXml(fileName);
this.instanceBean();
}
private void instanceBean() {
if(beans != null && beans.size()>0){
for(SxtBean bean : beans){
try {
results.put(bean.getId(),Class.forName(bean.getClazz()).newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private void parthXml(String fileName) {
URL url = this.getClass().getClassLoader().getResource(fileName);
SAXReader reader = new SAXReader();
try {
Document document = reader.read(url);
XPath xPath = document.createXPath("beans/bean");
List<Element> elements = xPath.selectNodes(document);
if(null != elements && elements.size()>0){
beans = new ArrayList<SxtBean>();
for (Element element : elements){
beans.add( new SxtBean(element.attributeValue("id"),element.attributeValue("class")));
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
@Override
public Object getBean(String beanName) {
return results.get(beanName);
}
}