2011-09-03 92 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