您的位置:首页 > 移动开发

IDEA 中读取不了配置文件以及ClassPathXmlApplicationContext与FileSystemXmlApplicationContext

2017-07-04 16:36 615 查看
在学习Spring的时候(看的《Spring4.x企业应用开发实战》),书上用的IDE 是 Myeclipse,这里用的是IDEA。在编译:

String configPath = "com/baobaotao/advice/beans.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);


提示错误

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [com/baobaotao/advice/beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [com/baobaotao/advice/beans.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:614)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:515)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.baobaotao.advice.TestThrowAdvice.main(TestThrowAdvice.java:14)
Caused by: java.io.FileNotFoundException: class path resource [src/main/java/com/baobaotao/advice/beans.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
... 13 more


异常说的比较清楚,指定路径的文件不存在。怎么可能不存在呢,这里用File的输出流测试,打印到控制台上没有问题,说明路径是没有问题的。

然后修改成了

String configPath = "src/main/java/com/baobaotao/advice/beans.xml";
ApplicationContext ctx = new FileSystemXmlApplicationContext(configPath);


是可以访问到的。

ClassPathXmlApplicationContext

ClassPathXmlApplicationContext 默认从类路径加载配置文件,在类路径文件夹下。这里用的maven的文件夹结构,如下图:



  target文件夹就是存放class类的文件夹问价相应目录下,并没有beans.xml文件。IDEA在源码目录下(src/main/java),只会把.java文件编译成.class文件,存到classes文件夹下,其他的配置文件是不会做处理的(MyEclipse会把配置文件复制到相应的包下)。但可以在resources文件夹下,创建相应的包目录,放到相应的目录下,IDEA就会将配置文件,复制到classes文件夹下,也就可以访问到了。

  这里从类路径加载文件只需要写指定的包路径以及文件名即可。如:

String configPath = "com/baobaotao/advice/beans.xml";


FileSystemXmlApplicationContext

FileSystemXmlApplicationContext 默认从文件系统加载配置文件,可使用相对路径或者绝对路径进行访问,也就理所当然的会访问到相应的文件。这里从文件系统访问路径需要从根路径开始写完整文件相对路径,也就是从src开始写,如:

String configPath = "src/main/java/com/baobaotao/advice/beans.xml";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring ide idea
相关文章推荐