我有以下“Beans.xml”;它是在'src'文件夹中的eclipse中:
<?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运行时,我把所有系统库都删除了。
我真的不想通过添加一堆库而不知道他们应该做什么来解决这个问题。有人可以解释这里发生了什么以及为什么建议的解决方案可以解决问题吗?
答案 0 :(得分:0)
对于项目中使用的弹簧罐,这是一个尚未确定的问题。
我有一整套弹簧罐 - 其中8个或10个 - 都以org.springframework.-3.1.1.RELEASE.jar的形式命名;这些被放置在Spring Tool Suite(又名eclipse)的构建路径上作为jar。另一个程序员有一个类似的简单项目正在使用的形式弹簧 - 3.1.2.RELEASE.jar,所以我切换到那些。现在代码可以工作了。
感谢所有提供帮助的人;我仍然不知道两组jar之间的区别,或者为什么原始错误消息是如此模糊(任何抛出FileNotFoundException的代码都应该告诉我们关于哪个文件的信息)。
答案 1 :(得分:0)
ClassPathXmlApplicationContext:您无需提供完整路径,但必须正确设置CLASSPATH
。
如果你的代码抛出异常就意味着,在classpath中找不到容器bean定义。检查类路径,然后重试。
如果您使用 FileSystemXmlApplicationContext ,您需要提供XML bean的完整路径。
参考检查Spring ApplicationContext Container
Spring 3.1.x支持注释,所以我更喜欢注释@Autowired
来初始化任何bean。