最近在研究Java的Spring,跟着这个文章来对着一步一步的做:
http://www.cnblogs.com/xing901022/p/4178963.html
然而即使是比葫芦画瓢,也不是一帆风顺。
期间遇到了这样一个问题:
在按照文章导入Spring3.0.5的jar包并且按照文章里提到的步骤来搭建环境的情况下,写好Person和Test类,创建好Bean.xml后,在eclipse里调试仍然会出现问题。
废话不多说,直接上图:
如上图所示,在ClassPathXMLApplicationContext这个类里出现异常了。
然后按了下F8,就出现完整的异常信息:
十一月 15, 2016 10:48:19 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7f6473: startup date [Tue Nov 15 10:48
:19 CST 2016]; root of context hierarchy
十一月 15, 2016 10:48:19 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [bean.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML docum
ent from class path resource [bean.xml]; nested exception is java.io.FileNotFoundException: class path resource [bean.xm
l] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
……(此处省略多行)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.context.support.ClassPathXmlApplicationContext.
at org.springframework.context.support.ClassPathXmlApplicationContext.
at test.springTest.test.main(test.java:10)
Caused by: java.io.FileNotFoundException: class path resource [bean.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
... 13 more
这么一大片错误信息,看了半天也就标红的这句话有实际意义……然后明白了是因为找不到这个xml文件导致的。然后就开始各种百度,搜索这个类的名称,以及搜索错误信息等方法,按照搜索到可能修复的方式来进行了尝试,但均未能正常进行下去。昨晚心灰意冷了好一阵子,今天想了想,感觉一个入门的文章遇到的错误都搞不定,后面的东西还怎么看?所以就硬着头皮来继续尝试了。
我想这也是很多人自学时候最头疼的问题了,遇到奇葩问题不知道该怎么解决。也没人帮忙,也不知道该怎么问,因为压根不知道问题出在哪!
继续搜索ClassPathXMLApplicationContext关键字,然后找到了文章大部分都是说xml文件路径不对,放在WEB-INF文件夹下即可;或者是说项目的构建路径(Java Build Path)配置有问题,将xml文件所在的文件夹加到项目构建路径里即可。
第一种说法,我的项目里压根没有WEB-INF文件夹,所以不可能是因为这个问题。然而不管我怎么移动xml文件的存放路径,在代码里也尝试过写xml文件的绝对路径,都不管用。于是就开始尝试第二种说法,打开项目的构建路径,最初打开如下图所示:(这是一个我之前建的JAVA工程)
如上图所示,项目里的src文件夹的复选框上显示的是方块而不是勾,也就意味着src文件夹里的东西并非全部包括,可打开src文件夹,里面的文件夹也没包含上。
最初也不明白怎么回事,然后看一篇文章里说要把这个xml文件存放的文件夹的路径给加上,我把xml文件放在src文件夹里,可是无效。于是乎我就尝试在构建路径里加上xml文件。可构建路径里只能加文件夹。阴差阳错机缘巧合之下,我把src路径又重新添加了一边,这样一来,就存在两个src路径了,构建路径窗口上方就有一行报错。大致是说两个src文件夹不能嵌套,只好删了一个,应该是把系统初始创建的给删掉了。
保存之后我发现我的项目里的java文件全部有错误。。我知道肯定是我删错了,我就把构建路径里那个后来创建的也给删掉了。可这样一来,就没有了构建路径,java文件里的错误依然存在。我只好再次手动把src文件夹添加上,但添加的时候我发现,这次src文件夹的复选框可以变成√了,于是我就给勾上。抱着试试看的态度保存了下,然后就发现java文件的错误都不存在了。再次调试,发现程序也能正常执行了。
对了,调试时候使用的eclipse版本为:
Version: Kepler Service Release 2
Build id: 20140224-0627
是不是这个eclipse版本存在问题呢?目前不太清楚。