2011-09-03 167 views
1

沒有獨特的豆,我想用一個小的測試案例,測試春天@Configuration,但它會拋出錯誤春季JavaConfig - NoSuchBeanDefinitionException:類型

org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有獨特的豆類型[com.mycompany.MavenVaadinSpring.service.UserManager]的定義如下:

我做了什麼錯了?我的代碼如下:

AppConfigTest.java

public class AppConfigTest { 

    public static void main(String[] args) { 
     JavaConfigApplicationContext context = new JavaConfigApplicationContext(AppConfig.class); 
     UserManager userManager = context.getBean(UserManager.class); 
    } 
} 

AppConfig.java

@Configuration 
@ResourceBundles("classpath:jdbc-mysql") 
public abstract class AppConfig { 

    @Bean 
    public BasicDataSource dataSource() { 
     BasicDataSource basicDataSource = new BasicDataSource();   
     return basicDataSource; 
    } 

    @Bean 
    public UserDao userDao() { 
     UserDao UDI = new UserDaoImpl(); 
     UDI.setDataSource(dataSource()); 

     return UDI; 
    } 

    @Bean 
    public UserManager userManager() { 
     UserManager UM = new UserManagerImpl(); 
     UM.setUserDao(userDao()); 

     return UM; 
    } 

    abstract @ExternalValue("jdbc.url") String url(); 
    abstract @ExternalValue("jdbc.username") String username(); 
    abstract @ExternalValue("jdbc.password") String password(); 
    abstract @ExternalValue("jdbc.jdbc.driverClassName") String classname();  
} 

堆棧跟蹤:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.mycompany.MavenVaadinSpring.service.UserManager] is defined: 
at org.springframework.config.java.context.TypeSafeBeanFactoryUtils.getBean(TypeSafeBeanFactoryUtils.java:46) 
at org.springframework.config.java.context.JavaConfigApplicationContext.getBean(JavaConfigApplicationContext.java:378) 
at com.mycompany.MavenVaadinSpring.AppConfigTest.main(AppConfigTest.java:11) 
+0

巴洛斯感謝您改善我的問題的前景 – cscsaba

回答

3

看來你在這裏使用的是獨立彈簧javaconfig項目(證明由.config.java打包並使用JavaConfigAppli cationContext類)。自從包含在Spring 3.0中後,該項目不再支持。包裝已更改,現在將JavaConfigApplicationContext稱爲AnnotationConfigApplicationContext。但是,整體編程模型是相同的。

給這個相同的場景一個針對Spring 3發佈的鏡頭,看看你是否得到相同的結果。如果您需要GA版本,現在可以使用Spring 3.0.6;如果您可以處理里程碑,請嘗試使用Spring 3.1 M2,甚至是Spring 3.1的夜間快照。你會發現Java配置支持在這些更高版本中得到了顯着增強。

+0

您好克里斯,我在你的文章中錯過了什麼? http://blog.springsource.com/2008/03/26/spring-java-configuration-whats-new-in-m3/有一行「AnnotationApplicationContext deprecated」和一些關於碰撞的詞,它們是「Spring 2.5's Annotation驅動注入「,並在示例中使用」JavaConfigApplicationContext「。但我會按照你的話,並感謝您的快速回復 – cscsaba

+0

Ups後我提到日期爲2008 – cscsaba

+0

我在哪裏可以找到最新的解釋關於如何? – cscsaba