我是Spring Framework的新手。我正在使用 NetBeans 进行IDE。我按照几个教程自己学习。但是,我陷入了中间,无法继续前进。让我在这里分解我的项目:
我的项目文件夹结构如下所示:
有两个班级;主要的 MainApp.java 包含以下代码:
package com.myprojects.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context;
context = new ClassPathXmlApplicationContext("classpath*:beans.xml");
FirstPage obj;
obj = (FirstPage) context.getBean("firstPage");
obj.getMessage();
}
}
第二类文件 FirstPage.java 如下所示:
package com.myprojects.spring;
public class FirstPage {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
beans.xml 文件如下所示:
<?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-4.0.0.RELEASE.xsd
">
<bean id = "firstPage" class = "com.myprojects.spring.FirstPage">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
现在,我收到的错误如下所示:
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为&#39; firstPage&#39;已定义
我知道我在这里犯了一些愚蠢的错误。 先感谢您 !
答案 0 :(得分:0)
已经讨论了几乎类似的问题before。我认为您的程序无法找到beans.xml
。
尝试这样做:
context = new ClassPathXmlApplicationContext("META-INF/beans.xml");
编辑:
此新错误XmlBeanDefinitionStoreException
表示您的架构无效。尝试按照其中一个答案中的描述更改架构:
Spring configuration XML schema: with or without version?
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<bean id = "firstPage" class = "com.myprojects.spring.FirstPage">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
答案 1 :(得分:0)
将beans.xml放在Meta-inf之外,
或使用新的ClassPathXmlApplicationContext(“META-INF / beans.xml”);
http://www.springframework.org/schema/beans/spring-beans-4.0.0.RELEASE.xsd
应该改为
http://www.springframework.org/schema/beans/spring-beans-4.0.0.xsd,因为spring的xsd文件名不包含“RELEASE”。
xsd文件位于spring-beans.jar中的org.springframework.beans.factory.xml包中,查看xsd文件是否在该包中。
答案 2 :(得分:0)
根据您发布的目录结构,src/main/resources
很可能在您的类路径中。如果您想引用弹簧上下文文件beans.xml
,则必须相对于类路径上的文件夹指定它。因此你应该尝试:
context = new ClassPathXmlApplicationContext("classpath:/META-INF/beans.xml");
此外:符号classpath*:beans.xml
表示您要读取名称为beans.xml
的所有上下文文件。
答案 3 :(得分:0)
做以下两件事解决了我的问题。
1) beans.xml 路径不正确。我将其更改为context = new ClassPathXmlApplicationContext("META-INF/beans.xml");
。
2)此外,还存在无效的 xsi:schemaLocation 属性值。我将该属性的值更改为http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
。
谢谢大家的帮助。