自动装配bean不起作用

时间:2013-06-13 19:00:22

标签: spring autowired jdbctemplate

我有一节课:

@Configuration
public abstract class JDBCConnFactory  {        
    @Autowired
    @Qualifier("dataSource")
    @Bean
    public SimpleJdbcOperations jdbcConnection(DataSource dataSource){
        return new SimpleJdbcTemplate(dataSource);
    }
}

我尝试在另一个类中使用bean jdbcConnection:

@Autowired
@Qualifier("jdbcConnection")
private SimpleJdbcOperations dbConn;

我收到错误:

No qualifying bean of type [org.springframework.jdbc.core.simple.SimpleJdbcOperations] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=jdbcConnection)}

或其他例外:

 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jdbcConnection' is defined

我的错误在哪里?为什么找不到jdbcConnection bean?

2 个答案:

答案 0 :(得分:2)

您应该将@Qualifier("dataSource")移至正确的自动装配数据源

public SimpleJdbcOperations jdbcConnection(@Qualifier("dataSource") DataSource dataSource) { ... }


然后删除@Qualifier("jdbcConnection")并简单地使用

@Autowired
private SimpleJdbcOperations dbConn;

或在JDBCConnFactory课程中设置bean名称并保留@Qualifier("jdbcConnection"),就像现在一样:

@Configuration
public abstract class JDBCConnFactory  {        
    @Autowired
    @Bean(name = "jdbcConnection")
    public SimpleJdbcOperations jdbcConnection(@Qualifier("dataSource") DataSource dataSource){
        return new SimpleJdbcTemplate(dataSource);
    }
}


如果您有多个不同的数据源和SimpleJdbcOperations,则第二个选项更可取。否则,我认为第一个更简单,更清洁。

答案 1 :(得分:0)

看一下spring框架参考的第5.9.3节。它涵盖了限定词。

你的资格赛不匹配,因此春天无法解决你的自动装配问题。试试这个:

@Autowired
@Qualifier("dataSource")
private SimpleJdbcOperations dbConn;