Вообще говоря, вы должны избегать использования @ConditionalOnClass
для @Bean
метода именно по этой причине.Эта ситуация описана в справочной документации , где рекомендуется использовать отдельный класс @Configuration
для изоляции условия @ConditionalOnClass
.
Чтобы ответить на ваши конкретные вопросы:
- Да, первый компонент будет зарегистрирован до тех пор, пока класс конфигурации может быть загружен
- Да, точка останова в первом методе
@Bean
должна быть достигнута во время отладки - Это зависитна то, как ссылка на класс, который не может быть решен.Если он используется только в теле метода
@Bean
, класс должен загрузиться успешно.Если неразрешимый класс используется в сигнатуре метода @Bean
(обычно это тип возврата), класс не сможет загрузиться. - N / A
Как отмечено вДокументация, связанная с вышеупомянутым, вместо того, чтобы беспокоиться о сценариях, описанных в 3, и о том, что будет и не будет работать, рекомендуется использовать отдельный, вероятно, вложенный класс @Configuration
с условием уровня класса.Для вашего конкретного примера это будет выглядеть так:
@Configuration
class CustomConfiguration {
@Bean
@ConditionalOnClass(String.class)
String knownClass() {
return "Hello";
}
@Configuration
@ConditionalOnClass(MissingClass.class)
static class DoubtfulBeanConfiguration {
@Bean
MissingClass missingClass() {
return new MissingClass();
}
}
}