Spring错误 - org.springframework.beans.factory.NoSuchBeanDefinitionException

时间:2013-10-21 16:58:24

标签: java spring

我从Spring教程开始,正在尝试这个简单的代码,

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(HelloWorldConfig.class);
    ctx.register(HelloWorldConfig1.class);
    ctx.refresh();

    HelloWorld helloWorld = ctx.getBean(HelloWorld.class);

    helloWorld.setMessage("Hello World!");
    helloWorld.getMessage();

     HelloWorld1 helloWorld1 = ctx.getBean(HelloWorld1.class);

     helloWorld1.setMessage("Hello World!");
     helloWorld1.getMessage();

这是抛出异常,

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.tutorialspoint.HelloWorld] is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:295)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1125)
at com.tutorialspoint.MainApp.main(MainApp.java:13)

虽然如果我尝试只注册一个配置并从那里使用bean,它就可以正常工作了。所以如果单独使用,HelloWorld / HelloWorldConfig或HelloWorld / HelloWorldConfig1工作正常,只有当我同时注册时才会出现此错误。

以下其他课程,

            package com.tutorialspoint;
            import org.springframework.context.annotation.*;

            @Configuration
            public class HelloWorldConfig {

               @Bean 
               public HelloWorld helloWorld(){
                  return new HelloWorld(); 
               }
            }

                            package com.tutorialspoint;
            import org.springframework.context.annotation.*;

            @Configuration
            public class HelloWorldConfig1 {

               @Bean 
               public HelloWorld1 helloWorld(){
                  return new HelloWorld1(); 
               }
            }

package com.tutorialspoint;

            public class HelloWorld {
               private String message;

               public void setMessage(String message){
                  this.message  = message;
               }

               public void getMessage(){
                  System.out.println("Your Message : " + message); 
               }
            }

package com.tutorialspoint;

            public class HelloWorld1 {
               private String message;

               public void setMessage(String message){
                  this.message  = message;
               }

               public void getMessage(){
                  System.out.println("Your Message 1: " + message); 
               }
            }

1 个答案:

答案 0 :(得分:2)

中的@Bean方法
@Configuration
public class HelloWorldConfig1 {
    @Bean 
    public HelloWorld1 helloWorld(){
        return new HelloWorld1(); 
    }
 }

正在覆盖其他@Bean类的@Configuration方法。如果name声明中没有@Bean属性,则Spring使用方法名称作为bean定义名称。由于它们的名字都是相同的,所以Spring只保留它注册为bean定义的最后一个。

将方法重命名为其他内容或将name属性添加到@Bean声明

@Bean("helloWorld1")