Spring делает начальное сканирование классов, чтобы определить, какие бины он собирается сделать. Затем он начнет фазу «инициализации».
@Bean
аннотированные методы в @Configuration
аннотированных классах будут вызваны, а результат загружен в ApplicationContext
. Таким образом, RestHighLevelClient
создается (в соответствии с вашим методом) и загружается.
Затем он пытается создать экземпляр ProfileService
. Он видит, что требуется экземпляр RestHighLevelClient
(по параметру конструктора). Он выглядит как ApplicationContext
, а также компоненты, запланированные для создания на этапе сканирования. Поскольку существует только один RestHighLevelClient
экземпляр, конфликта нет, поэтому этот экземпляр используется.
Из других комментариев:
Если имеется несколько RestHighLevelClient
экземпляров либо ожидают создания, либо уже находятся в ApplicationContext
, тогда вы получите BeanCreationException
с подробным описанием "слишком много кандидатов, ожидается 1, но найдено n ".
Это может быть выполнено несколькими способами.
Вы можете аннотировать один бобов RestHighLevelClient
как @Primary
, что указывает «используйте это, если доступно несколько, но требуется только один» '.
Вы можете аннотировать параметр конструктора с помощью @Qualifier
детализации , которая из нескольких экземпляров будет автоматически подключена.
Вы можете изменить параметр конструктора на Collection<RestHighLevelClient>
который автоматически соединит все таких экземпляров, а затем сделает выбор самостоятельно в конструкторе.