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

13 篇文章 1 订阅

在学习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";
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值