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

在学习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.(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.(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的文件夹结构,如下图:
IDEA 中读取不了配置文件以及ClassPathXmlApplicationContext与FileSystemXmlApplicationContext_第1张图片
  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";

你可能感兴趣的:(java,javaEE)