线程“main”中的异常 org.springframework.beans.factory.BeanDefinitionStoreException: IOException从类路径资源解析XML文档 [COM /主/ beans.xml中];嵌套异常是 java.io.FileNotFoundException:类路径资源 无法打开[com / main / beans.xml],因为它不存在
ApplicationContext context =
new ClassPathXmlApplicationContext("com/main/beans.xml");
我之前尝试过
ApplicationContext context =
new FileSystemXmlApplicationContext("src/main/java/com/main/beans.xml");
效果很好。
如何相对于类路径做到这一点?
注意:类路径位于构建路径
在我正在关注的示例中,它具有以下结构并且可以正常工作
项目结构
类路径
ApplicationContext context =
new ClassPathXmlApplicationContext("com/caveofprogramming/spring/test/beans/beans.xml");
答案 0 :(得分:6)
这是我通常使用的文件结构,工作正常。正如@ M.Deinum所说,你要将你的xml文件放在src/main/resources
中。我通常在包含资源的完整包路径中使用资源,因此在编译期间,maven会将所有资源添加到与使用它们的相应类相同的路径中。
执行上述操作时,
资源会被复制到类包中
public class App {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("com/underdogdevs/stackmaven/beans.xml");
Hello hello = (Hello) context.getBean("hello");
hello.sayHello();
}
}
对我来说很好。如果您想知道为什么当xml已经在同一个类包中时仍需要使用完整的包名,那么它将首先在类根中搜索
<强>更新强>
将包含bean.xml
的包放入src/main/resources
。它应该适用于您使用的路径。
更新2
“是的,它有效。但为什么它正在运行这个例子,我也关注。如果beans.xml超出了src / main / resources ..我不知道它是如何工作的?*
问题是,Spring容器将从类根目录中查找。它与resources
文件夹无关。 resources
是maven项目构建到类路径的便利目录。本教程工作的原因是beans.xml
位于包中,它将被放入构建中的类路径中,如下所示。使用resources
只是首选,但包`也将构建到类路径。