首页 > 代码库 > Spring模拟BeanFactory实现
Spring模拟BeanFactory实现
实现Spring中BeanFactory的案例
1.设计模式(工厂)
2.jdom
3.Java反射机制
1.beans.xml
2.DAO
3.Impl
4.Service
5.BeanFactory
6.ClassPathXmlApplication
public class ClassPathXmlApplicationContext implements BeanFactory {
private Map<String, Object> beans = new HashMap<String, Object>();
public ClassPathXmlApplicationContext() throws Exception {
SAXBuilder sb = new SAXBuilder();
// 构造文档对象
Document doc = sb.build(this.getClass().getClassLoader()
.getResourceAsStream("beans.xml"));
// 获取元素HD
Element root = doc.getRootElement();
// 取得名字为bean的所有元素
List list = root.getChildren("bean");
//
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
String id = element.getAttributeValue("id");
String classes = element.getAttributeValue("class");
Object o = Class.forName(classes).newInstance();
System.out.println(id);
System.out.println(classes);
beans.put(id, o);
for (Element propertyElement : (List<Element>) element
.getChildren("property")) {
String name = propertyElement.getAttributeValue("name");
String bean = propertyElement.getAttributeValue("bean");
Object beanObject = beans.get(bean);
String methodName = "set" + name;
System.out.println("method name = " + methodName);
Method m = o.getClass().getMethod(methodName,
beanObject.getClass().getInterfaces()[0]);
m.invoke(o, beanObject);
}
}
}
/*
* (non-Javadoc)
*
* @see com.yg.Spring.BeanFactory#getBean(java.lang.String)
*/
@Override
public Object getBean(String id) {
// TODO Auto-generated method stub
return beans.get(id);
}
}
7.Test
Spring模拟BeanFactory实现