NoSuchBeanDefinitionException:没有名为' FirstPage'被定义为

时间:2017-05-11 04:58:49

标签: java spring

我是Spring Framework的新手。我正在使用 NetBeans 进行IDE。我按照几个教程自己学习。但是,我陷入了中间,无法继续前进。让我在这里分解我的项目:

我的项目文件夹结构如下所示:

Folder Structure Image

有两个班级;主要的 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;已定义

我知道我在这里犯了一些愚蠢的错误。 先感谢您 !

4 个答案:

答案 0 :(得分:0)

已经讨论了几乎类似的问题before。我认为您的程序无法找到beans.xml

尝试这样做:

context = new ClassPathXmlApplicationContext("META-INF/beans.xml");

编辑:

此新错误XmlBeanDefinitionStoreException表示您的架构无效。尝试按照其中一个答案中的描述更改架构:

  1. https://stackoverflow.com/a/21525719/2815219
  2. https://stackoverflow.com/a/25782515/2815219
  3. 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

谢谢大家的帮助。