Spring 中字段的不满足依赖错误

Unsatisfied Dependency Error through field in Spring

下面的代码工作正常,但如果我在 OracleConfiguration class 中注释 jdbcTemplateRandomName 方法,我会收到以下错误:-

我试图通过评论 jdbcTemplateRandomName 方法来理解为什么我会收到错误 错误在 BaseDaoImpl class.

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'baseDaoImpl': Unsatisfied dependency expressed through field 'jdbcTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.jdbc.core.JdbcTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.jdbc.core.JdbcTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

@Component
    public class BaseDaoImpl {

        @Autowired
        private JdbcTemplate jdbcTemplate;


            public JdbcTemplate getJdbcTemplate() {
                                return jdbcTemplate;
            }
@Configuration   
 public class OracleConfiguration {

        @Bean
        DataSource dataSource() throws SQLException {

            OracleDataSource dataSource = new OracleDataSource();
            //removed code for brevity setting username,password to datasource
            return dataSource;
        }

        @Bean
         public JdbcTemplate jdbcTemplateRandomName(DataSource dataSource) {
           JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
           jdbcTemplate.setResultsMapCaseInsensitive(true);
            return jdbcTemplate;
        }

    public class RolesDaoImpl  extends BaseDaoImpl implements RolesDao  {

    //removed lot of unnecessary  code for the question
    List<Roles> rolesList  = getJdbcTemplate().query(sql,
                    new BeanPropertyRowMapper<Roles>(Roles.class));

如果您评论 jdbcTemplateRandomName() 方法,您将从 Spring IoC 配置中删除 JdbcTemplate bean 的声明。因此 Spring 将无法找到合适的对象来填充您的 BaseDaoImpl class

jdbcTemplate 属性