Spring JavaConfig - NoSuchBeanDefinitionException:没有类型的唯一bean

时间:2011-09-03 20:17:04

标签: java spring

我想用一个小测试用例来测试Spring @Configuration但是它会抛出错误

  

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义[com.mycompany.MavenVaadinSpring.service.UserManager]类型的唯一bean:

我做错了什么?我的代码如下:

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)

1 个答案:

答案 0 :(得分:3)

您似乎在这里使用独立的spring-javaconfig项目(由.config.java打包和使用JavaConfigApplicationContext类证明)。自从包含在Spring 3.0中以来,该项目不再受支持。包装已更改,JavaConfigApplicationContext现在称为AnnotationConfigApplicationContext。然而,整体编程模型是相同的。

针对Spring 3的版本提供相同的场景,看看你是否得到了相同的结果。如果您需要GA版本,Spring 3.0.6现已推出;如果您可以处理里程碑,请尝试Spring 3.1 M2,甚至是Spring 3.1的每夜快照。您会发现Java配置支持在这些更高版本中得到了显着增强。