Это может быть из-за открытой проблемы с версией Spring 5.xx -
https://github.com/spring-projects/spring-framework/issues/21498
Здесь говорится о проблеме, которая указана c до версий 5.xx.
Начиная со Spring 5.0 @Bean может возвращать значение null, и в результате определение bean-компонента остается в реестре, но значение не устанавливается автоматически. Однако, если есть другой bean-компонент того же типа, который не является нулевым, он не становится автоподключенным. Наверное, должно? Исключение из Spring не упоминает о существовании bean-компонента (нулевого или ненулевого).
Попробуйте пометить поля как необязательные, чтобы он не сработал при запуске.
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@SuppressWarnings({ "unchecked" })
public Optional<MyBean> MyBean(Optional<String> url,
Optional<String> user, Optional<String> password, Optional<String> id) {
if(url.isEmpty() && user.isEmpty() && password.isEmpty() && id.isEmpty()) {
return Optional.empty();
}
return Optional.of(new MyBean(url, user, password, id,
new HashMap<String, String>(),false));
}
Обновление 1
Думаю, это более простое решение. Spring 5.0 добавила аннотацию Nullable, и, вероятно, они добавили эту аннотацию только для такого рода сценариев.
Ссылка на документацию API - https://docs.spring.io/spring/docs/5.0.0.RC1_to_5.0.0.RC2/Spring%20Framework%205.0.0.RC2/org/springframework/lang/Nullable.html
Общая аннотация Spring чтобы объявить, что аннотированный параметр или возвращаемое значение может быть пустым при некоторых обстоятельствах.
Таким образом, все, что необходимо, - это пометить параметры и возвращаемый тип как Nullable.
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@SuppressWarnings({ "unchecked" })
public @Nullable MyBean myBean(@Nullable String url,
@Nullable String user, @Nullable String password, @Nullable String id) {
if(url == null && user == null && password == null && id == null) {
return null;
}
return new MyBean(url, user, password, id,
new HashMap<String, String>(),false);
}