我正在学习春季依赖注入。我有两种类型的代码。一个工作,一个不工作......但是,它们都适用于制作教程的人。
评论代码给出了以下错误。
@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],因为它不存在
答案 0 :(得分:2)
要使XmlBeanFactory
起作用,Beans.xml
必须与调用类位于同一目录中。
一个简单的替代方法是确保Beans.xml
位于类路径中。您可以将它们复制到src\resources
,然后使用:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) applicationContext.getBean("helloworld");
ClassPathXmlApplicationContext
更方便,因为不需要指定绝对文件位置。
注意:从Spring 3.1开始,XmlBeanFactory
是deprecated,这意味着如果从3.0更改,则应使用此类替代方法。
答案 1 :(得分:1)
对于ClassPathXmlApplicationContext
,应用程序上下文XML文件需要在您的ClassPath中可用。
如果您使用的是标准Maven目录布局,则需要将Beans.xml
文件放在src/main/resources
中。
如果您从IDE运行(看起来您正在使用屏幕截图中的Eclipse,尽管您没有明确说明您的IDE),您将需要进入Properties-&gt; Java Build Path并添加{{ 1}}到构建路径。
祝你好运,希望这会有所帮助!