С Тип аннотации ConditionalOnBean :
Условие может соответствовать только определениям компонентов, которые были обработаны контекстом приложения до сих пор, и поэтому настоятельно рекомендуется использовать это условие только для классов автоконфигурации. Если потенциальный компонент может быть создан другой автоконфигурацией, убедитесь, что после этого выполняется тот, который использует это условие.
В вашем случае проблема заключается в том, что DictionaryHandler
bean-компонент пытается быть создан до обработки класса конфигурации, и, учитывая, что bean-компонент JdbcTemplate
еще не находится в контейнере DI, ваш DictionaryHandler
не создается.
Одним из обходных путей может быть инициализация DictionaryHandler
в том же классе конфигурации, что и JdbcTemplate
.
Также вы можете использовать другой класс конфигурации, но вам придется использовать аннотацию @DependsOn
.
Пример:
@Component
@ConditionalOnBean(name = "bean1")
class AnotherBean {
}
@Configuration
class Config {
@Bean
public Object bean1() {
return new Object();
}
}
В предыдущем примере AnotherBean
не будет создано, но будет так:
@Configuration
class Config {
@Bean
public Object bean1() {
return new Object();
}
@Bean
@ConditionalOnBean(name = "bean1")
public AnotherBean anotherBean() {
return new AnotherBean();
}
}