3

我有以下“Beans.xml”;它在 Eclipse 中的“src”文件夹中:

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

        <bean id="user1" class="rc.User">
            <property name="name"    value="joe" />
        </bean>

    </beans>

我有以下java应用程序:

package rc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Asparagus 
{
    public static void main (String[] arguments)
    {
        ApplicationContext context = null;
        try
        {
            context = new ClassPathXmlApplicationContext("Beans.xml");
        }
        catch (ExceptionInInitializerError eiie)
        {
            System.out.println(eiie);
        }
        System.out.println("hi");
        User u = context.getBean("user1", User.class);
        System.out.println("hi2");
        System.out.println(u);
    }
}

这是在 Eclipse 中的 'src' 文件夹内的一个 'rc' 包中。我有一个 User bean 类,我想我不妨包括它:

package rc;

public class User 
{
    public User() {} 

    public String name;

    public String getName()                {return name;            }
    public void setName(String name)       {this.name = name;       }
}

当我运行它时,我得到 FileNotFoundException。我能想到的唯一文件是我的 XML 文件,但我不知道它为什么会出现问题。

我使用 DOS 查看目录结构,验证“Beans.xml”是否位于应用程序类路径的根目录中,位于 src 和 bin 下。我认为这一点可以通过 Asparagus 类(有人反对它被称为“Main”)被发现并开始运行这一事实得到证实,如果 src/bin 不是类路径根目录,eclipse 就无法做到这一点。

我最近在别人的建议下包含了一堆乱七八糟的库,这个问题消失了,我发现另一个问题(在 StackOverflow 中)是由一个 jar 作为系统库包含在 eclipse 中引起的,所以我拿了除了 java 运行时之外的所有系统库。

我真的不希望通过添加一堆库而不知道它们应该做什么来解决这个问题。有人可以解释这里发生了什么以及为什么建议的解决方案可以解决问题吗?

4

2 回答 2

0

ClassPathXmlApplicationContext:不需要提供完整路径,但必须CLASSPATH正确设置。如果您的代码抛出异常,则意味着容器在类路径中找不到 bean 定义。检查类路径并重试。

如果使用FileSystemXmlApplicationContext则需要提供 XML bean 的完整路径。

供参考检查Spring ApplicationContext 容器

Spring 3.1.x 支持注解,所以我更喜欢注解@Autowired来初始化任何 bean。

于 2014-05-12T09:40:48.020 回答
0

事实证明,这是项目中使用的弹簧罐的一些尚未确定的问题。

我有一整套弹簧罐——其中 8 个或 10 个——都以 org.springframework.-3.1.1.RELEASE.jar 的形式命名;这些作为 jars 放置在 Spring Tool Suite(又名 eclipse)中的构建路径上。另一个程序员有一个类似的简单项目正在运行,它使用 spring--3.1.2.RELEASE.jar 形式的 jar,所以我切换到了这些。现在代码可以工作了。

感谢所有提供帮助的人;我仍然不知道这两组 jar 之间的区别,也不知道为什么原始错误消息如此晦涩(任何引发 FileNotFoundException 的代码都应该能够告诉我们有关哪个文件的信息)。

于 2013-02-04T22:40:30.113 回答