2013-10-21 118 views
0

我開始使用Spring教程,並試圖這樣簡單的代碼,春天錯誤 - org.springframework.beans.factory.NoSuchBeanDefinitionException

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); 
       } 
      } 
+0

讓我們看看你的配置類。 –

+0

在OP中添加了其他類。 – user2112430

回答

2

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

@Bean方法是從其他@Configuration類覆蓋@Bean方法。如果@Bean聲明中沒有name屬性,Spring將使用方法名稱作爲bean定義名稱。由於它們的名字都是相同的,所以Spring將只保留它註冊爲bean定義的最後一個。

重命名方法,以別的東西或name屬性添加到@Bean聲明

+0

非常感謝..工作完美。 – user2112430