【问题标题】:Spring Dependancy Injection: FileNotFound ExceptionSpring 依赖注入:FileNotFoundException
【发布时间】:2012-12-23 21:02:17
【问题描述】:

我正在学习 spring 依赖注入。我有两种类型的代码。一种有效,一种无效……但是,它们都适用于制作本教程的人。

注释代码给了我如下所示的错误。

    @SuppressWarnings("deprecation")
public static void main(String[] args) {

    //ApplicationContext factory = new ClassPathXmlApplicationContext("Beans.xml");

    //The code below works
    BeanFactory factory = new XmlBeanFactory(new FileSystemResource("Beans.xml"));
    HelloWorld obj = (HelloWorld) factory.getBean("helloworld");

    obj.getMessage();
}

Beans.xml

 <?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="
           http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd           
       ">


    <bean id="helloworld" class="com.vulab.hellow.HelloWorld">
        <property name="message" value="Hello World" />
    </bean>
</beans>

当我使用 ApplicationContext

时出现错误消息

线程“main”中的异常 org.springframework.beans.factory.BeanDefinitionStoreException:IOException 从类路径资源 [Beans.xml] 解析 XML 文档;嵌套异常是 java.io.FileNotFoundException: 类路径资源 [Beans.xml] 无法打开,因为它不存在

【问题讨论】:

  • 文件 Beans.xml 或文件 beans.xml ?检查案例?
  • 在 IDE 中也是一样的。 @JeromeC。
  • 您将 Beans.xml 文件放在哪里?它是否在源文件夹中(每当您编译应用程序时,它是否会复制到您的类文件夹中)?
  • @ClaudioFernandez 我如何确保这一点?我打开了我的类文件夹..没有看到任何名为 Beans.xml
  • 把你的 Beans.xml 放到调用它的类的同一个目录中。如果你使用maven,你可以把它放在资源文件夹中。

标签: java spring dependency-properties


【解决方案1】:

要使XmlBeanFactory 工作,Beans.xml 必须与调用类位于同一目录中。

一个简单的替代方法是确保Beans.xml 位于您的类路径中。您可以将它们复制到src\resources,然后使用:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) applicationContext.getBean("helloworld");

ClassPathXmlApplicationContext 更方便,因为不需要指定绝对文件位置。

注意:从 Spring 3.1 开始,XmlBeanFactorydeprecated,这意味着如果您从 3.0 更改,应该使用这样的替代方法。

【讨论】:

  • 成功了!!谢谢...只是好奇拥有这两种类型的代码有什么意义?
  • 它们是不同的阅读器,XmlBeanFactory 默认不从类路径中读取。
【解决方案2】:

对于ClassPathXmlApplicationContext,应用程序上下文 XML 文件需要在您的 ClassPath 中可用。

如果您使用标准 Maven 目录布局,您需要将 Beans.xml 文件放在 src/main/resources 中。

如果您从 IDE 运行(从屏幕截图中看起来您正在使用 Eclipse,尽管您没有明确说明您的 IDE),您将需要进入 Properties->Java Build Path 并添加 src/main/resources到构建路径。

祝你好运,希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2015-10-04
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多