我有一节课:
@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?
答案 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;