Как сделать инъекцию бина в Spring в зависимости от условия?

Как я могу сделать инъекцию бина в зависимости от условия? У меня есть @Autowired бин, который должен быть проинициализирован, когда выбраны Spring-профили A и B, и не должен инициалазироваться, когда выбран профиль C.

P.S.: Spring конфигурирую в xml.


Ответы (2 шт):

Автор решения: Zhenyria

В Spring есть аннотация @Lazy, которая указывает, что данный бин должен быть проинициализирован "лениво", то есть инициализации не будет, пока не произойдёт первое обращение к бину.

Эта аннотация может быть добавлена как к классу конфигурации (в этом случае все бины будут загружаться лениво), так и к конфигу конкретного бина, компоненту или полю, отмеченному аннотацией @Autowired.

→ Ссылка
Автор решения: Геннадий Венидиктов

Я знаю несколько простых способов сделать то что вам требуется:

  1. Если вы используете профили для разного конфигурирования приложения можно воспользоваться аннотацией @Profile("!С"), если поставить данную аннотацию над бином он будет инициализирован только в том случае если профиль не C. (Профиль можно задать в настройках Intellij idea). Ссылка на тему профилей

  2. Создать свойство в файле ресурсов application.yaml относительно которого потом решать создавать бин или нет c помощью аннотации @ConditionalOnProperty(prefix = "anyprefix", name = "bin", havingValue = "true").

Ссылки на тему данной аннотации: вот и вот, также есть похожий вопрос

→ Ссылка