实质就是通过反射机制实现对象的创建
(1)dom4j导入、解析xml
(2)测试
//存储对象
private Map<String ,Object> ioc=new HashMap<String, Object>(); //加载xml 进行解析 public ClassPathXmlApplicationContext(String path){ SAXReader reader=new SAXReader(); try { Document document=reader.read("./src/main/resources/"+path); Element root=document.getRootElement(); Iterator<Element> iterator=root.elementIterator(); while (iterator.hasNext()){ Element element=iterator.next(); String id=element.attributeValue("id"); String className=element.attributeValue("class"); try { //反射机制创建对象 Class clazz=Class.forName(className); try { //获取无参构造函数 Constructor constructor =clazz.getConstructor(); try { Object object=constructor.newInstance(); Iterator<Element>e_dom=element.elementIterator(); while (e_dom.hasNext()){ Element dom=e_dom.next(); String name =dom.attributeValue("name"); String valueStr=dom.attributeValue("value"); try { Field field=clazz.getDeclaredField(name); String methodName="set"+name.substring(0,1).toUpperCase()+name.substring(1); Method method=clazz.getDeclaredMethod(methodName,field.getType()); String type=field.getType().getName(); Object value=null; if(type=="long"){ value=Long.parseLong(valueStr); } if(type=="java.lang.String"){ value=valueStr; } if(type=="int"){ value=Integer.parseInt(valueStr); } method.invoke(object,value); } catch (NoSuchFieldException e) { e.printStackTrace(); } } ioc.put(id,object); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } catch (NoSuchMethodException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } catch (DocumentException e) { e.printStackTrace(); } } public Object getBean(String id) { return ioc.get(id); }