package com.test.MyReadXml;import java.io.File;
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.DocumentException;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;import org.dom4j.Element;
import com.test.bean.XmlBean;public class TanWanApplicationContext {
private List<XmlBean> listBean = new ArrayList<XmlBean>();
private Map<String,Object> sigletons = new HashMap<String,Object>();
public TanWanApplicationContext(String filename)
{
this.readXML(filename);
this.instanceBeans();
}
private void instanceBeans() {
for(XmlBean xmlBean : listBean)
{
try {
if(null!=xmlBean.getClassname() && !(""==xmlBean.getClassname().trim()))
sigletons.put(xmlBean.getId(), xmlBean.getClassname().getClass().newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void readXML(String filename) {
SAXReader reader = new SAXReader(); 
Document document = null;
        try {
         URL xmlpath = this.getClass().getClassLoader().getResource(filename);
document = reader.read(new File("beans.xml"));
Map<String,Object> mapBean = new HashMap<String,Object>();
mapBean.put("ns","http://www.springframework.org/schema/beans");
XPath xsub = document.createXPath("//ns:beans/ns:bean");
xsub.setNamespaceURIs(mapBean);
List<Element> beans = xsub.selectNodes(document);
for(Element element : beans)
{
String id = element.attributeValue("id");
String clazz = element.attributeValue("class");
XmlBean xmlBean = new XmlBean(id,clazz);
listBean.add(xmlBean);
}
} catch (DocumentException e) {
e.printStackTrace();

}
public Object getBean(String beanName)
{
return sigletons.get(beanName);
}
}这个是模拟ClassPathXmlApplicationContext的类
然后xml的配置文件在根目录下<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="personService" class="com.test.service.imp.PersonServiceBean"></bean>
</beans>
这个是我的beans.xml的配置文件
XmlBean类里就一个构造方法2个参数和2个属性加get and set方法
运行这个测试类的时候就报出来说我的貌似是xml文件找不到
以下是异常信息org.dom4j.DocumentException: beans.xml (系统找不到指定的文件。) Nested exception: beans.xml (系统找不到指定的文件。)
at org.dom4j.io.SAXReader.read(SAXReader.java:266)
at com.test.MyReadXml.TanWanApplicationContext.readXML(TanWanApplicationContext.java:42)
at com.test.MyReadXml.TanWanApplicationContext.<init>(TanWanApplicationContext.java:23)
at com.test.SpringTest.instanceSpring(SpringTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
部分...如果需要全部我回复大家

解决方案 »

  1.   

    工程下建source文件夹:conf
    把bean.xml放到里面。
      

  2.   

    本来就是放在src下面 - -!!
      

  3.   

    是文件位置不对...我把文件地址改了下对beans.xml改为了src/beans.xml就可以了,但是新问题来了,还是出不了我那个打印的方法...JUnit窗口里貌似说instanceSpring有个红色的叉叉...但是Console没有东西出来package com.test;import org.junit.BeforeClass;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.test.MyReadXml.TanWanApplicationContext;
    import com.test.service.PersonService;public class SpringTest {
    @Test public void instanceSpring()
    {
    TanWanApplicationContext ctx = new TanWanApplicationContext("src/beans.xml");
    PersonService personService = (PersonService)ctx.getBean("personService");
    personService.save();
    }
    }