Что определяет порядок регистрации bean-компонентов Spring Boot для автоматических конфигураций?JAVA

Программисты JAVA общаются здесь
Anonymous
Что определяет порядок регистрации bean-компонентов Spring Boot для автоматических конфигураций?

Сообщение Anonymous »

У меня есть приложение Spring Boot 3.0 с несколькими подпроектами, созданное gradle. В модулях A и B у меня есть bean-компоненты с аннотациями

Код: Выделить всё

@Bean
@ConditionalOnBean(jakarta.jms.ConnectionFactory.class)
объявлен.
Фактический подпроект app, содержащий работоспособное загрузочное приложение, зависит от обоих этих модулей. Также модуль B зависит от A. Приложение также имеет зависимость runtimeOnly от ActiveMQ Artemis, позволяющую Spring Boot ArtemisAutoConfiguration выполнять настройку фабрики соединений JMS через ArtemisAutoConfiguration.
Однако, когда я смотрю на отчет об оценке состояния после запуска приложения, я вижу, что условие не соответствует компоненту, определенному в подпроекте A, но соответствует компоненту, определенному в подпроекте B. Поскольку ConditionalOnBean оценивается на этапе регистрации компонента, я предполагаю, что определение компонента для artemis регистрируется только после регистрации компонента в подпроекте A, но до регистрации компонента в подпроекте B.
Может ли кто-нибудь объяснить, что определяет этот порядок?
Я уже просматривал BOOT-INF/classpath.idx в загрузочном jar Spring. Но это показывает A и B перед любыми записями artemis и Spring-Boot-Autoconfiguration. Поэтому я полагаю, что это не так.
ПРИМЕЧАНИЕ: да, использование @AutoConfigureAfter(ArtemisAutoConfiguration.class) при автоматической настройке подпроекта A исправляет это. Мне просто любопытно узнать, почему это действительно было необходимо применить.

Подробнее здесь: https://stackoverflow.com/questions/770 ... igurations

Вернуться в «JAVA»